diff --git a/src/main/helm/templates/_helpers.tpl b/src/main/helm/templates/_helpers.tpl index b751300901210a527e983c3866a633f31ac9adf1..35152325ca62a283189615711b36bf0e61010307 100644 --- a/src/main/helm/templates/_helpers.tpl +++ b/src/main/helm/templates/_helpers.tpl @@ -172,4 +172,12 @@ app.kubernetes.io/namespace: {{ include "app.namespace" . }} {{- define "app.getZufiManagerAddress" -}} {{- required "zufiManager.address must be set" (.Values.zufiManager).address -}} +{{- end -}} + +{{- define "app.getKeyStorePath" -}} +{{- printf "/workspace/keystore/xta-keystore.p12" -}} +{{- end -}} + +{{- define "app.getTrustStorePath" -}} +{{- printf "/workspace/truststore/xta-truststore.jks" -}} {{- end -}} \ No newline at end of file diff --git a/src/main/helm/templates/deployment.yaml b/src/main/helm/templates/deployment.yaml index 47459d82bf1d9bdfb1b3dcd3b9276e2cefc76177..4b9faa2ee2b6334bb92d024bcbc0f248abd0ad0b 100644 --- a/src/main/helm/templates/deployment.yaml +++ b/src/main/helm/templates/deployment.yaml @@ -285,6 +285,50 @@ spec: - name: ozgcloud_vorgangManager_serviceAddress value: {{ include "app.ozgcloud_vorgangmanager_address" . }} + {{- if (.Values.ozgcloud).xta }} + - name: ozgcloud_xta_enabled + value: {{ quote ((.Values.ozgcloud).xta).enabled }} + - name: ozgcloud_xta_sendServiceUrl + value: {{ ((.Values.ozgcloud).xta).sendServiceUrl }} + - name: ozgcloud_xta_msgBoxServiceUrl + value: {{ ((.Values.ozgcloud).xta).msgBoxServiceUrl }} + - name: ozgcloud_xta_managementServiceUrl + value: {{ ((.Values.ozgcloud).xta).managementServiceUrl }} + - name: ozgcloud_xta_maxListItems + value: {{ quote ((.Values.ozgcloud).xta).maxListItems }} + - name: ozgcloud_xta_clientIdentifiers + value: '{{ ((.Values.ozgcloud).xta).clientIdentifiers | toJson }}' + - name: ozgcloud_xta_keystore_file + value: {{ printf "file:%s" (include "app.getKeyStorePath" .) }} + - name: ozgcloud_xta_keystore_type + valueFrom: + secretKeyRef: + name: "xta-keystore" + key: type + optional: false + - name: ozgcloud_xta_keystore_password + valueFrom: + secretKeyRef: + name: "xta-keystore" + key: password + optional: false + {{- if ((.Values.ozgcloud).xta).truststore }} + - name: ozgcloud_xta_truststore_file + value: {{ printf "file:%s" (include "app.getTrustStorePath" .) }} + - name: ozgcloud_xta_truststore_type + valueFrom: + secretKeyRef: + name: "xta-truststore" + key: type + optional: false + - name: ozgcloud_xta_truststore_password + valueFrom: + secretKeyRef: + name: "xta-truststore" + key: password + optional: false + {{- end }} + {{- end }} {{- if or (.Values.database).useExternal (.Values.ozgcloudProxyApi).apikey }} envFrom: {{- if (.Values.database).useExternal }} @@ -388,6 +432,18 @@ spec: - name: vorgang-manager-grpc-tls-cert mountPath: "/grpc-tls" readOnly: true + {{- if ((.Values.ozgcloud).xta).keystore }} + - name: xta-keystore + mountPath: {{ include "app.getKeyStorePath" . }} + subPath: file + readOnly: true + {{- end }} + {{- if ((.Values.ozgcloud).xta).truststore }} + - name: xta-truststore + mountPath: {{ include "app.getTrustStorePath" . }} + subPath: file + readOnly: true + {{- end }} volumes: - name: bindings configMap: @@ -424,6 +480,16 @@ spec: path: ca.crt - configMap: name: bindings-type + {{- if ((.Values.ozgcloud).xta).keystore }} + - name: xta-keystore + secret: + secretName: xta-keystore + {{- end }} + {{- if ((.Values.ozgcloud).xta).truststore }} + - name: xta-truststore + secret: + secretName: xta-truststore + {{- end }} dnsConfig: {} dnsPolicy: ClusterFirst imagePullSecrets: diff --git a/src/main/helm/templates/xta_keystore_secret.yaml b/src/main/helm/templates/xta_keystore_secret.yaml new file mode 100644 index 0000000000000000000000000000000000000000..54c6c6b4924f5ed54058719f7d780661260bf404 --- /dev/null +++ b/src/main/helm/templates/xta_keystore_secret.yaml @@ -0,0 +1,37 @@ +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +{{- if ((.Values.ozgcloud).xta).keystore }} +apiVersion: v1 +kind: Secret +metadata: + name: xta-keystore + namespace: {{ include "app.namespace" . }} +type: Opaque +stringData: + password: {{ .Values.ozgcloud.xta.keystore.password }} + type: {{ .Values.ozgcloud.xta.keystore.type }} +data: + file: {{ .Values.ozgcloud.xta.keystore.file }} +{{- end }} \ No newline at end of file diff --git a/src/main/helm/templates/xta_truststore_secret.yaml b/src/main/helm/templates/xta_truststore_secret.yaml new file mode 100644 index 0000000000000000000000000000000000000000..49e26fc0a4c2360429a9491f632d6aab4db105ce --- /dev/null +++ b/src/main/helm/templates/xta_truststore_secret.yaml @@ -0,0 +1,37 @@ +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +{{- if ((.Values.ozgcloud).xta).truststore }} +apiVersion: v1 +kind: Secret +metadata: + name: xta-truststore + namespace: {{ include "app.namespace" . }} +type: Opaque +stringData: + password: {{ .Values.ozgcloud.xta.truststore.password }} + type: {{ .Values.ozgcloud.xta.truststore.type }} +data: + file: {{ .Values.ozgcloud.xta.truststore.file }} +{{- end }} \ No newline at end of file diff --git a/src/test/helm/deployment_xta_test.yaml b/src/test/helm/deployment_xta_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f43db8d81e227038832d9e88d524fb5f4e39d9eb --- /dev/null +++ b/src/test/helm/deployment_xta_test.yaml @@ -0,0 +1,264 @@ +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +suite: deployment xta environment +release: + name: vorgang-manager + namespace: by-helm-test +templates: + - templates/deployment.yaml +set: + baseUrl: test.sh.ozg-cloud.de + ozgcloud: + environment: dev + bezeichner: helm + xta: + enabled: true + sendServiceUrl: http://sendServiceUrl + msgBoxServiceUrl: http://msgBoxServiceUrl + managementServiceUrl: http://managementServiceUrl + maxListItems: 1 + clientIdentifiers: + - name: name aus helm 1 + category: kategorie aus helm 1 + value: wert aus helm 1 + - name: name aus helm 2 + category: kategorie aus helm 2 + value: wert aus helm 2 + imagePullSecret: test-image-pull-secret +tests: + - it: should enable xta + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: ozgcloud_xta_enabled + value: "true" + + - it: should set send service url + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: ozgcloud_xta_sendServiceUrl + value: http://sendServiceUrl + + - it: should set message box service url + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: ozgcloud_xta_msgBoxServiceUrl + value: http://msgBoxServiceUrl + + - it: should set management service url + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: ozgcloud_xta_managementServiceUrl + value: http://managementServiceUrl + + - it: should set max list items + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: ozgcloud_xta_maxListItems + value: "1" + + - it: should set client identifiers + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: ozgcloud_xta_clientIdentifiers + value: '[{"category":"kategorie aus helm 1","name":"name aus helm 1","value":"wert aus helm 1"},{"category":"kategorie aus helm 2","name":"name aus helm 2","value":"wert aus helm 2"}]' + + - it: should set keystore file + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: ozgcloud_xta_keystore_file + value: "file:/workspace/keystore/xta-keystore.p12" + + - it: should set keystore type + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: ozgcloud_xta_keystore_type + valueFrom: + secretKeyRef: + name: "xta-keystore" + key: type + optional: false + + - it: should set keystore password + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: ozgcloud_xta_keystore_password + valueFrom: + secretKeyRef: + name: "xta-keystore" + key: password + optional: false + + - it: should set truststore file + set: + ozgcloud: + xta: + truststore: + password: geheim2 + file: VoZWltvfvbdCg== + type: JKS + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: ozgcloud_xta_truststore_file + value: "file:/workspace/truststore/xta-truststore.jks" + + - it: should set truststore type + set: + ozgcloud: + xta: + truststore: + password: geheim2 + file: VoZWltvfvbdCg== + type: JKS + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: ozgcloud_xta_truststore_type + valueFrom: + secretKeyRef: + name: "xta-truststore" + key: type + optional: false + + - it: should set truststore password + set: + ozgcloud: + xta: + truststore: + password: geheim2 + file: VoZWltvfvbdCg== + type: JKS + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: ozgcloud_xta_truststore_password + valueFrom: + secretKeyRef: + name: "xta-truststore" + key: password + optional: false + + - it: should not mount volume + asserts: + - notContains: + path: spec.template.spec.containers[0].volumeMounts + content: + name: xta-keystore + mountPath: "/workspace/keystore/xta-keystore.p12" + subPath: file + readOnly: true + - notContains: + path: spec.template.spec.containers[0].volumeMounts + content: + name: xta-truststore + mountPath: "/workspace/truststore/xta-truststore.jks" + subPath: file + readOnly: true + - it: should not have volume + asserts: + - notContains: + path: spec.template.spec.volumes + content: + name: xta-keystore + secret: + secretName: xta-keystore + - notContains: + path: spec.template.spec.volumes + content: + name: xta-truststore + secret: + secretName: xta-truststore + - it: should mount volume + set: + ozgcloud: + xta: + keystore: + password: geheim + file: Z2VoZWltCg== + type: pkcs12 + truststore: + password: geheim2 + file: VoZWltvfvbdCg== + type: JKS + asserts: + - contains: + path: spec.template.spec.containers[0].volumeMounts + content: + name: xta-keystore + mountPath: "/workspace/keystore/xta-keystore.p12" + subPath: file + readOnly: true + - contains: + path: spec.template.spec.containers[0].volumeMounts + content: + name: xta-truststore + mountPath: "/workspace/truststore/xta-truststore.jks" + subPath: file + readOnly: true + - it: should have volume + set: + ozgcloud: + xta: + keystore: + password: geheim + file: Z2VoZWltCg== + truststore: + password: geheim2 + file: VoZWltvfvbdCg== + type: JKS + asserts: + - contains: + path: spec.template.spec.volumes + content: + name: xta-keystore + secret: + secretName: xta-keystore + - contains: + path: spec.template.spec.volumes + content: + name: xta-truststore + secret: + secretName: xta-truststore diff --git a/src/test/helm/xta_keystore_secret_test.yaml b/src/test/helm/xta_keystore_secret_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..77c84e8f99c541647f705bf5aa1f49ed94f1e699 --- /dev/null +++ b/src/test/helm/xta_keystore_secret_test.yaml @@ -0,0 +1,112 @@ +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +suite: test xta keystore secret +templates: + - templates/xta_keystore_secret.yaml +release: + name: xta-adapter + namespace: helm-test +tests: + - it: should create keystore secret + set: + ozgcloud: + xta: + keystore: + password: geheim + type: pkcs12 + file: Z2VoZWltCg== + asserts: + - isKind: + of: Secret + - it: should set api version + set: + ozgcloud: + xta: + keystore: + password: geheim + type: pkcs12 + file: Z2VoZWltCg== + asserts: + - isAPIVersion: + of: v1 + - it: should set value type + set: + ozgcloud: + xta: + keystore: + password: geheim + type: pkcs12 + file: Z2VoZWltCg== + asserts: + - equal: + path: type + value: Opaque + - it: should set metadate values + set: + ozgcloud: + xta: + keystore: + password: geheim + type: pkcs12 + file: Z2VoZWltCg== + asserts: + - equal: + path: metadata.name + value: xta-keystore + - equal: + path: metadata.namespace + value: helm-test + - it: should set springData values + set: + ozgcloud: + xta: + keystore: + password: geheim + type: pkcs12 + file: Z2VoZWltCg== + asserts: + - equal: + path: stringData.password + value: geheim + - equal: + path: stringData.type + value: pkcs12 + - it: should set value for data.file + set: + ozgcloud: + xta: + keystore: + password: geheim + type: pkcs12 + file: Z2VoZWltCg== + asserts: + - equal: + path: data.file + value: Z2VoZWltCg== + + - it: should not create keystore by default + asserts: + - hasDocuments: + count: 0 diff --git a/src/test/helm/xta_truststore_secret_test.yaml b/src/test/helm/xta_truststore_secret_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..76dba6cf75560bca814ec9dc21fc750499264d9b --- /dev/null +++ b/src/test/helm/xta_truststore_secret_test.yaml @@ -0,0 +1,112 @@ +# +# Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +suite: test xta truststore secret +templates: + - templates/xta_truststore_secret.yaml +release: + name: xta-adapter + namespace: helm-test +tests: + - it: should create truststore secret + set: + ozgcloud: + xta: + truststore: + password: geheim + type: JKS + file: Z2VoZWltCg== + asserts: + - isKind: + of: Secret + - it: should set api version + set: + ozgcloud: + xta: + truststore: + password: geheim + type: JKS + file: Z2VoZWltCg== + asserts: + - isAPIVersion: + of: v1 + - it: should set value for type + set: + ozgcloud: + xta: + truststore: + password: geheim + type: JKS + file: Z2VoZWltCg== + asserts: + - equal: + path: type + value: Opaque + - it: should set values for metadata + set: + ozgcloud: + xta: + truststore: + password: geheim + type: JKS + file: Z2VoZWltCg== + asserts: + - equal: + path: metadata.name + value: xta-truststore + - equal: + path: metadata.namespace + value: helm-test + - it: should set stringData values + set: + ozgcloud: + xta: + truststore: + password: geheim + type: JKS + file: Z2VoZWltCg== + asserts: + - equal: + path: stringData.password + value: geheim + - equal: + path: stringData.type + value: JKS + - it: should set value data.file + set: + ozgcloud: + xta: + truststore: + password: geheim + type: JKS + file: Z2VoZWltCg== + asserts: + - equal: + path: data.file + value: Z2VoZWltCg== + + - it: should not create truststore by default + asserts: + - hasDocuments: + count: 0 diff --git a/vorgang-manager-server/pom.xml b/vorgang-manager-server/pom.xml index ddf27cfdc8f89b705dab5c2e3068fe8f0563ce54..8d62130edc126483cdbe565da4114c4588407841 100644 --- a/vorgang-manager-server/pom.xml +++ b/vorgang-manager-server/pom.xml @@ -59,7 +59,7 @@ <api-lib.version>0.15.0</api-lib.version> <notification-manager.version>2.14.0</notification-manager.version> <collaboration-manager.version>0.7.0</collaboration-manager.version> - <archive-manager.version>0.1.2</archive-manager.version> + <archive-manager.version>0.2.0-SNAPSHOT</archive-manager.version> <document-manager.version>1.1.0</document-manager.version> <zip.version>2.11.5</zip.version> @@ -456,4 +456,4 @@ </snapshotRepository> </distributionManagement> -</project> +</project> \ No newline at end of file diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/archive/ArchiveManagerITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/archive/ArchiveManagerITCase.java index 6707c3a27418d4f522ff5ada52b65147a1457f95..93485d528920c2e310a6fd1e5da9b03eba01a131 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/archive/ArchiveManagerITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/archive/ArchiveManagerITCase.java @@ -25,6 +25,7 @@ package de.ozgcloud.archive; import static org.assertj.core.api.Assertions.*; import static org.junit.jupiter.api.Assertions.fail; +import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import java.io.ByteArrayOutputStream; @@ -41,7 +42,6 @@ import org.springframework.test.annotation.DirtiesContext; import com.google.protobuf.ByteString; -import de.ozgcloud.archive.attributes.ClientAttributeService; import de.ozgcloud.archive.common.callcontext.CallContextUser; import de.ozgcloud.archive.grpc.export.ExportServiceGrpc.ExportServiceBlockingStub; import de.ozgcloud.archive.grpc.export.GrpcExportVorgangRequest; @@ -90,6 +90,8 @@ public class ArchiveManagerITCase { @Nested class TestArchiveVorgang { + private static final String ATTRIBUTE_NAME_ANTRAG_ARCHIVING = "ARCHIVING"; + @BeforeEach void init() { vorgang = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).version(0).build()); @@ -136,7 +138,7 @@ public class ArchiveManagerITCase { private ClientAttribute getArchivingClientAttribute(Vorgang vorgang) { var archiveAttributes = vorgang.getClientAttributes().get(CallContextUser.ARCHIVE_MANAGER_CLIENT_NAME); assertThat(archiveAttributes).isNotNull(); - return archiveAttributes.get(ClientAttributeService.ATTRIBUTE_NAME_ANTRAG_ARCHIVING); + return archiveAttributes.get(ATTRIBUTE_NAME_ANTRAG_ARCHIVING); } }