diff --git a/dbrepo-gateway-service/dbrepo.conf b/dbrepo-gateway-service/dbrepo.conf index fe98534bd8ddc43e42bdb1a55ad0192a86236621..659300566efe5e3aad1b80ea2450791e5bbb92e6 100644 --- a/dbrepo-gateway-service/dbrepo.conf +++ b/dbrepo-gateway-service/dbrepo.conf @@ -18,9 +18,9 @@ server { location /dashboard/ { rewrite ^/dashboard/(.*) /$1 break; - proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://dashboard-ui:3000; proxy_read_timeout 90; @@ -29,9 +29,9 @@ server { # Proxy Grafana Live WebSocket connections. location /dashboard/api/live/ { rewrite ^/dashboard/(.*) /$1 break; - proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; @@ -42,9 +42,9 @@ server { # Proxy Keycloak OIDC connections, c.f. https://www.keycloak.org/server/reverseproxy#_exposed_path_recommendations location /realms { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://auth-service:8080; proxy_read_timeout 90; @@ -52,45 +52,45 @@ server { # Proxy Keycloak assets, c.f. https://www.keycloak.org/server/reverseproxy#_exposed_path_recommendations location /resources { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://auth-service:8080; proxy_read_timeout 90; } location /api/search { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://search-service:8080; proxy_read_timeout 90; } location /api/datasource { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://dashboard-service:8080; proxy_read_timeout 90; } location /api/dashboard { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://dashboard-service:8080; proxy_read_timeout 90; } location /api/upload { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_pass http://data-service:8080; @@ -102,63 +102,63 @@ server { } location /api/analyse { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://analyse-service:8080; proxy_read_timeout 90; } location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/table/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/(data|statistic|history)" { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://data-service:8080; proxy_read_timeout 90; } location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/view/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/(data|statistic)" { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://data-service:8080; proxy_read_timeout 90; } location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/view" { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://metadata-service:8080; proxy_read_timeout 90; } location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/subset" { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://data-service:8080; proxy_read_timeout 600; } location ~ "/api/(database|concept|container|identifier|image|message|license|oai|ontology|unit|user)" { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://metadata-service:8080; proxy_read_timeout 90; } location ~ "/api/identifier/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})" { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://metadata-service:8080; proxy_read_timeout 90; @@ -166,18 +166,18 @@ server { location ~ "/pid/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})" { rewrite /pid/(.*) /api/identifier/$1 break; - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://metadata-service:8080; proxy_read_timeout 90; } location / { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://ui:3000; proxy_read_timeout 90; diff --git a/helm/dbrepo/README.md b/helm/dbrepo/README.md index 2fd53053375841cfb6bd4934aa6630ed4ce279df..c5edf4d2a87083190f6f26b03aeee264522ff51e 100644 --- a/helm/dbrepo/README.md +++ b/helm/dbrepo/README.md @@ -94,7 +94,6 @@ The command removes all the Kubernetes components associated with the chart and | `authservice.enabled` | Enable the Auth Service. | `true` | | `authservice.image.debug` | Set the logging level to `trace`. Otherwise, set to `info`. | `false` | | `authservice.endpoint` | The hostname for the microservices. | `http://auth-service` | -| `authservice.extraStartupArgs` | Extra arguments for the Keycloak container. | `--hostname-strict false --proxy-headers xforwarded` | | `authservice.resourcesPreset` | The container resource presets | `small` | | `authservice.jwt.pubkey` | The JWT public key from the `dbrepo-client`. | `MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB` | | `authservice.client.id` | The client id for the microservices. | `dbrepo-client` | @@ -344,39 +343,42 @@ mqtt.prefetch = 10 ### User Interface -| Name | Description | Value | -| ------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------- | ----------------------- | -| `ui.enabled` | Enable the Broker Service. | `true` | -| `ui.podSecurityContext.enabled` | Enable pods' Security Context | `true` | -| `ui.podSecurityContext.fsGroupChangePolicy` | Set filesystem group change policy | `Always` | -| `ui.podSecurityContext.sysctls` | Set kernel settings using the sysctl interface | `[]` | -| `ui.podSecurityContext.supplementalGroups` | Set filesystem extra groups | `[]` | -| `ui.podSecurityContext.fsGroup` | Set RabbitMQ pod's Security Context fsGroup | `1001` | -| `ui.containerSecurityContext.enabled` | Enabled containers' Security Context | `true` | -| `ui.containerSecurityContext.seLinuxOptions` | Set SELinux options in container | `{}` | -| `ui.containerSecurityContext.runAsUser` | Set RabbitMQ containers' Security Context runAsUser | `1001` | -| `ui.containerSecurityContext.runAsGroup` | Set RabbitMQ containers' Security Context runAsGroup | `1001` | -| `ui.containerSecurityContext.runAsNonRoot` | Set RabbitMQ container's Security Context runAsNonRoot | `true` | -| `ui.containerSecurityContext.allowPrivilegeEscalation` | Set container's privilege escalation | `false` | -| `ui.containerSecurityContext.readOnlyRootFilesystem` | Set container's Security Context readOnlyRootFilesystem | `false` | -| `ui.containerSecurityContext.capabilities.drop` | Set container's Security Context runAsNonRoot | `["ALL"]` | -| `ui.containerSecurityContext.seccompProfile.type` | Set container's Security Context seccomp profile | `RuntimeDefault` | -| `ui.resourcesPreset` | The container resource preset | `micro` | -| `ui.resources` | Set container requests and limits for different resources like CPU or memory (essential for production workloads) | `{}` | -| `ui.public.api.client` | The endpoint for the client api. Defaults to the value of `gateway`. | `""` | -| `ui.public.api.server` | The endpoint for the server api. Defaults to the value of `gateway`. | `""` | -| `ui.public.upload.client` | The endpoint for the upload client. Defaults to the value of `gateway` and path `/api/upload/files`. | `""` | -| `ui.public.title` | The user interface title. | `Database Repository` | -| `ui.public.logo` | The user interface logo. | `/logo.svg` | -| `ui.public.icon` | The user interface icon. | `/favicon.ico` | -| `ui.public.touch` | The user interface apple touch icon. | `/apple-touch-icon.png` | -| `ui.public.broker.host` | The displayed broker hostname. | `example.com` | -| `ui.public.broker.extra` | Extra metadata displayed. | `""` | -| `ui.public.database.extra` | Extra metadata displayed. | `""` | -| `ui.public.pid.default.publisher` | The default dataset publisher for persisted identifiers. | `Example University` | -| `ui.public.doi.enabled` | Enable the display that DOIs are minted. | `false` | -| `ui.public.doi.endpoint` | The DOI proxy. | `https://doi.org` | -| `ui.replicaCount` | The number of replicas. | `1` | +| Name | Description | Value | +| ------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- | +| `ui.enabled` | Enable the Broker Service. | `true` | +| `ui.oidc.authSessionSecret` | This should be a at least 48 characters random string. It is used to encrypt the user session. | `qJteD-fvcHNafjwDtJOT3pF7IrN1OEzQRcIyPO0xAT4gzct0` | +| `ui.oidc.sessionSecret` | This should be a at least 48 characters random string. It is used to encrypt the user session. | `TjOH1lFnocixYmy5ol2I5cOdsYUdrd5_jZsGxo6aMVPNNDkh` | +| `ui.oidc.tokenKey` | This needs to be a random cryptographic AES key in base64. Used to encrypt the server side token store. You can generate a key in JS with await subtle.exportKey('raw', await subtle.generateKey({ name: 'AES-GCM', length: 256, }, true, ['encrypt', 'decrypt'])). You just have to encode it to base64 afterwards. | `data:;base64,ntxOAfrF6yw22Ec1AFHK21iFz7L3PZmz9857Uqwyme0=` | +| `ui.podSecurityContext.enabled` | Enable pods' Security Context | `true` | +| `ui.podSecurityContext.fsGroupChangePolicy` | Set filesystem group change policy | `Always` | +| `ui.podSecurityContext.sysctls` | Set kernel settings using the sysctl interface | `[]` | +| `ui.podSecurityContext.supplementalGroups` | Set filesystem extra groups | `[]` | +| `ui.podSecurityContext.fsGroup` | Set RabbitMQ pod's Security Context fsGroup | `1001` | +| `ui.containerSecurityContext.enabled` | Enabled containers' Security Context | `true` | +| `ui.containerSecurityContext.seLinuxOptions` | Set SELinux options in container | `{}` | +| `ui.containerSecurityContext.runAsUser` | Set RabbitMQ containers' Security Context runAsUser | `1001` | +| `ui.containerSecurityContext.runAsGroup` | Set RabbitMQ containers' Security Context runAsGroup | `1001` | +| `ui.containerSecurityContext.runAsNonRoot` | Set RabbitMQ container's Security Context runAsNonRoot | `true` | +| `ui.containerSecurityContext.allowPrivilegeEscalation` | Set container's privilege escalation | `false` | +| `ui.containerSecurityContext.readOnlyRootFilesystem` | Set container's Security Context readOnlyRootFilesystem | `false` | +| `ui.containerSecurityContext.capabilities.drop` | Set container's Security Context runAsNonRoot | `["ALL"]` | +| `ui.containerSecurityContext.seccompProfile.type` | Set container's Security Context seccomp profile | `RuntimeDefault` | +| `ui.resourcesPreset` | The container resource preset | `micro` | +| `ui.resources` | Set container requests and limits for different resources like CPU or memory (essential for production workloads) | `{}` | +| `ui.public.api.client` | The endpoint for the client api. Defaults to the value of `gateway`. | `""` | +| `ui.public.api.server` | The endpoint for the server api. Defaults to the value of `gateway`. | `""` | +| `ui.public.upload.client` | The endpoint for the upload client. Defaults to the value of `gateway` and path `/api/upload/files`. | `""` | +| `ui.public.title` | The user interface title. | `Database Repository` | +| `ui.public.logo` | The user interface logo. | `/logo.svg` | +| `ui.public.icon` | The user interface icon. | `/favicon.ico` | +| `ui.public.touch` | The user interface apple touch icon. | `/apple-touch-icon.png` | +| `ui.public.broker.host` | The displayed broker hostname. | `example.com` | +| `ui.public.broker.extra` | Extra metadata displayed. | `""` | +| `ui.public.database.extra` | Extra metadata displayed. | `""` | +| `ui.public.pid.default.publisher` | The default dataset publisher for persisted identifiers. | `Example University` | +| `ui.public.doi.enabled` | Enable the display that DOIs are minted. | `false` | +| `ui.public.doi.endpoint` | The DOI proxy. | `https://doi.org` | +| `ui.replicaCount` | The number of replicas. | `1` | ### Dashboard Service diff --git a/helm/dbrepo/charts/seaweedfs-4.2.1.tgz b/helm/dbrepo/charts/seaweedfs-4.2.1.tgz index 3b21c83737040745d9723e6662e83b1cdef9966e..5a28b277d8fadee69e1b4dd171105febb34e1182 100644 Binary files a/helm/dbrepo/charts/seaweedfs-4.2.1.tgz and b/helm/dbrepo/charts/seaweedfs-4.2.1.tgz differ diff --git a/helm/dbrepo/templates/auth-configmap.yaml b/helm/dbrepo/templates/auth-configmap.yaml index 6fe5b9ed1df612dee53a095413d9d48183383f42..8d8340bd9bb3db42e8a1385cdf4a0e631963f525 100644 --- a/helm/dbrepo/templates/auth-configmap.yaml +++ b/helm/dbrepo/templates/auth-configmap.yaml @@ -11,6 +11,7 @@ data: AUTH_SERVICE_ADMIN: "{{ .Values.authservice.auth.adminUser }}" AUTH_SERVICE_ADMIN_PASSWORD: "{{ .Values.authservice.auth.adminPassword }}" AUTH_SERVICE_ENDPOINT: "{{ .Values.authservice.endpoint }}" + KEYCLOAK_HOSTNAME: "{{ .Values.gateway }}" LDAP_ROOT: "{{ .Values.identityservice.global.ldapDomain }}" LDAP_ADMIN_DN: "cn={{ .Values.identityservice.global.adminUser }},{{ .Values.identityservice.global.ldapDomain }}" LDAP_ADMIN_PASSWORD: "{{ .Values.identityservice.global.adminPassword }}" diff --git a/helm/dbrepo/templates/gateway-configmap.yaml b/helm/dbrepo/templates/gateway-configmap.yaml index 79078be7ea5b7457e28b0d17d34c18f847f49cb0..6b8a912db78d4e2d92d331c5158e6fd14f39aa60 100644 --- a/helm/dbrepo/templates/gateway-configmap.yaml +++ b/helm/dbrepo/templates/gateway-configmap.yaml @@ -30,11 +30,11 @@ data: autoindex_localtime on; } - location /dashboard { + location /dashboard/ { rewrite ^/dashboard/(.*) /$1 break; - proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_protocol_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://dashboard-ui; proxy_read_timeout 90; @@ -43,9 +43,9 @@ data: # Proxy Grafana Live WebSocket connections. location /dashboard/api/live/ { rewrite ^/dashboard/(.*) /$1 break; - proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_protocol_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; @@ -56,9 +56,9 @@ data: # Proxy Keycloak OIDC connections, c.f. https://www.keycloak.org/server/reverseproxy#_exposed_path_recommendations location /realms { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_protocol_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://auth-service; proxy_read_timeout 90; @@ -66,45 +66,46 @@ data: # Proxy Keycloak assets, c.f. https://www.keycloak.org/server/reverseproxy#_exposed_path_recommendations location /resources { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_protocol_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://auth-service; proxy_read_timeout 90; } location /api/search { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_protocol_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://search-service; proxy_read_timeout 90; } location /api/datasource { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_protocol_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://dashboard-service; proxy_read_timeout 90; } location /api/dashboard { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_protocol_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Host $host; proxy_pass http://dashboard-service; proxy_read_timeout 90; } location /api/upload { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_protocol_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_pass http://data-service; @@ -116,63 +117,63 @@ data: } location /api/analyse { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_protocol_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://analyse-service; proxy_read_timeout 90; } location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/table/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/(data|statistic|history)" { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_protocol_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://data-service; proxy_read_timeout 90; } location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/view/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/(data|statistic)" { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_protocol_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://data-service; proxy_read_timeout 90; } location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/view" { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_protocol_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://metadata-service; proxy_read_timeout 90; } location ~ "/api/database/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})/subset" { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_protocol_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://data-service; proxy_read_timeout 600; } location ~ "/api/(database|concept|container|identifier|image|message|license|oai|ontology|unit|user)" { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_protocol_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://metadata-service; proxy_read_timeout 90; } location ~ "/api/identifier/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})" { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_protocol_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://metadata-service; proxy_read_timeout 90; @@ -180,18 +181,18 @@ data: location ~ "/pid/([0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})" { rewrite /pid/(.*) /api/identifier/$1 break; - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_protocol_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://metadata-service; proxy_read_timeout 90; } location / { - proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_protocol_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://ui; proxy_read_timeout 90; diff --git a/helm/dbrepo/templates/ui-secret.yaml b/helm/dbrepo/templates/ui-secret.yaml index a84ac8f5cef024c88fa41ce085f494cca396df9f..54340220811040bad5eb5a4db79d5eb7d18541e7 100644 --- a/helm/dbrepo/templates/ui-secret.yaml +++ b/helm/dbrepo/templates/ui-secret.yaml @@ -31,4 +31,7 @@ stringData: NUXT_OIDC_PROVIDERS_KEYCLOAK_REDIRECT_URI: "{{ .Values.gateway }}/auth/keycloak/callback" NUXT_OIDC_PROVIDERS_KEYCLOAK_TOKEN_URL: "{{ .Values.gateway }}/realms/dbrepo/protocol/openid-connect/token" NUXT_OIDC_PROVIDERS_KEYCLOAK_USER_INFO_URL: "{{ .Values.gateway }}/realms/dbrepo/protocol/openid-connect/userinfo" + NUXT_OIDC_SESSION_SECRET: "{{ .Values.ui.oidc.sessionSecret }}" + NUXT_OIDC_TOKEN_KEY: "{{ .Values.ui.oidc.tokenKey }}" + NUXT_OIDC_AUTH_SESSION_SECRET: "{{ .Values.ui.oidc.authSessionSecret }}" {{- end }} diff --git a/helm/dbrepo/values.schema.json b/helm/dbrepo/values.schema.json index dcb506dba44127137a146ce53222abed01054db1..05b4e8a5f66d2f5ad38db8afb05e252cc8120c2b 100644 --- a/helm/dbrepo/values.schema.json +++ b/helm/dbrepo/values.schema.json @@ -129,9 +129,6 @@ "extraEnvVarsCM": { "type": "string" }, - "extraStartupArgs": { - "type": "string" - }, "extraVolumeMounts": { "items": { "properties": { @@ -230,6 +227,9 @@ }, "type": "object" }, + "proxyHeaders": { + "type": "string" + }, "replicaCount": { "type": "integer" }, @@ -1836,6 +1836,20 @@ }, "type": "object" }, + "oidc": { + "properties": { + "authSessionSecret": { + "type": "string" + }, + "sessionSecret": { + "type": "string" + }, + "tokenKey": { + "type": "string" + } + }, + "type": "object" + }, "podSecurityContext": { "properties": { "enabled": { diff --git a/helm/dbrepo/values.yaml b/helm/dbrepo/values.yaml index 56ac85d0be9f0ef60d0de523b121b8b58410773e..def9f0cca1ac70fe3e6e5cf937999f152403ca66 100644 --- a/helm/dbrepo/values.yaml +++ b/helm/dbrepo/values.yaml @@ -85,8 +85,8 @@ authservice: debug: false ## @param authservice.endpoint The hostname for the microservices. endpoint: http://auth-service - ## @param authservice.extraStartupArgs Extra arguments for the Keycloak container. - extraStartupArgs: --hostname-strict false --proxy-headers xforwarded + ## @skip authservice.proxyHeaders + proxyHeaders: xforwarded ## @skip authservice.postgresql postgresql: enabled: true @@ -790,6 +790,14 @@ ui: image: ## @skip ui.image.name name: registry.datalab.tuwien.ac.at/dbrepo/ui:1.8.0 + ## https://stackblitz.com/edit/nuxt-oidc-auth-keygen?file=index.js + oidc: + ## @param ui.oidc.authSessionSecret This should be a at least 48 characters random string. It is used to encrypt the user session. + authSessionSecret: qJteD-fvcHNafjwDtJOT3pF7IrN1OEzQRcIyPO0xAT4gzct0 + ## @param ui.oidc.sessionSecret This should be a at least 48 characters random string. It is used to encrypt the user session. + sessionSecret: TjOH1lFnocixYmy5ol2I5cOdsYUdrd5_jZsGxo6aMVPNNDkh + ## @param ui.oidc.tokenKey This needs to be a random cryptographic AES key in base64. Used to encrypt the server side token store. You can generate a key in JS with await subtle.exportKey('raw', await subtle.generateKey({ name: 'AES-GCM', length: 256, }, true, ['encrypt', 'decrypt'])). You just have to encode it to base64 afterwards. + tokenKey: data:;base64,ntxOAfrF6yw22Ec1AFHK21iFz7L3PZmz9857Uqwyme0= ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod podSecurityContext: ## @param ui.podSecurityContext.enabled Enable pods' Security Context diff --git a/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/Serialize.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/Serialize.java deleted file mode 100644 index 073a7c669901c33384a9b402b2c247cb50993694..0000000000000000000000000000000000000000 --- a/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/Serialize.java +++ /dev/null @@ -1,32 +0,0 @@ -package at.ac.tuwien.ifs.dbrepo.core; - -import at.ac.tuwien.ifs.dbrepo.core.test.BaseTest; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.hibernate6.Hibernate6Module; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; - -import java.io.IOException; -import java.util.TimeZone; - -public class Serialize extends BaseTest { - - public static ObjectMapper objectMapper() { - final ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.registerModule(new Jdk8Module()); - objectMapper.registerModule(new JavaTimeModule()); - objectMapper.registerModule(new Hibernate6Module()); /* lazy load mapping on REST endpoints */ - objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); - objectMapper.setTimeZone(TimeZone.getTimeZone("UTC")); - objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - objectMapper.enable(SerializationFeature.INDENT_OUTPUT); - return objectMapper; - } - - public static void main(String[] args) throws IOException { -// objectMapper().writeValue(new File("./src/main/resources/database-1.json"), IDENTIFIER_1); - } - -} diff --git a/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/test/BaseTest.java b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/test/BaseTest.java index b26e623cefa35b4c8a9691f2e55e56c5f74c1085..5209b40ce42e0675cf3c94570444f184f382b3e6 100644 --- a/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/test/BaseTest.java +++ b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/test/BaseTest.java @@ -42,6 +42,7 @@ import at.ac.tuwien.ifs.dbrepo.core.api.orcid.person.name.OrcidNameDto; import at.ac.tuwien.ifs.dbrepo.core.api.orcid.person.name.OrcidValueDto; import at.ac.tuwien.ifs.dbrepo.core.api.semantics.*; import at.ac.tuwien.ifs.dbrepo.core.api.user.*; +import at.ac.tuwien.ifs.dbrepo.core.api.user.UserAttributesDto; import at.ac.tuwien.ifs.dbrepo.core.api.user.internal.UpdateUserPasswordDto; import at.ac.tuwien.ifs.dbrepo.core.entity.container.Container; import at.ac.tuwien.ifs.dbrepo.core.entity.container.image.ContainerImage; diff --git a/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/test/pom.xml b/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/test/pom.xml deleted file mode 100644 index a7995dec69978781b8286d235d583a93e55bb4d3..0000000000000000000000000000000000000000 --- a/lib/java/dbrepo-core/src/main/java/at/ac/tuwien/ifs/dbrepo/core/test/pom.xml +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-service</artifactId> - <version>1.8.0</version> - </parent> - - <artifactId>dbrepo-metadata-service-test</artifactId> - <name>dbrepo-metadata-service-test</name> - <version>1.8.0</version> - - <dependencies> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-service-entities</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>at.tuwien</groupId> - <artifactId>dbrepo-metadata-service-api</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - -</project> \ No newline at end of file