diff --git a/token-checker-server/src/test/java/de/ozgcloud/token/CheckTokenResultTestFactory.java b/token-checker-server/src/test/java/de/ozgcloud/token/CheckTokenResultTestFactory.java index 813ce5fe20cacfd5251df713105f142e746df473..4a399bdeeb8553352708e664b61ebbb0757e4dbb 100644 --- a/token-checker-server/src/test/java/de/ozgcloud/token/CheckTokenResultTestFactory.java +++ b/token-checker-server/src/test/java/de/ozgcloud/token/CheckTokenResultTestFactory.java @@ -23,8 +23,9 @@ package de.ozgcloud.token; import java.util.List; import java.util.UUID; +import com.thedeanda.lorem.LoremIpsum; + import de.ozgcloud.token.TokenValidationResult.TokenValidationResultBuilder; -import de.ozgcloud.token.common.errorhandling.TokenVerificationExceptionTestFactory; import lombok.AccessLevel; import lombok.NoArgsConstructor; @@ -34,7 +35,7 @@ public class CheckTokenResultTestFactory { public static final String POSTFACH_ID = UUID.randomUUID().toString(); public static final String TRUST_LEVEL = "LOW"; public static final TokenAttribute OTHER_FIELD = TokenAttributeTestFactory.create(); - public static final String ERROR_MESSAGE = TokenVerificationExceptionTestFactory.MESSAGE; + public static final String ERROR_MESSAGE = LoremIpsum.getInstance().getWords(4); static TokenValidationResult createValid() { return createBuilder().valid(true).build(); diff --git a/token-checker-server/src/test/java/de/ozgcloud/token/GrpcCheckErrorTestFactory.java b/token-checker-server/src/test/java/de/ozgcloud/token/GrpcCheckErrorTestFactory.java index c6835eb30bb9cb907b17d66087a6b8548e873003..99db208a6f616d148ead1be17c9fd4dbc10979b1 100644 --- a/token-checker-server/src/test/java/de/ozgcloud/token/GrpcCheckErrorTestFactory.java +++ b/token-checker-server/src/test/java/de/ozgcloud/token/GrpcCheckErrorTestFactory.java @@ -1,11 +1,10 @@ package de.ozgcloud.token; import de.ozgcloud.token.GrpcCheckError.Builder; -import de.ozgcloud.token.common.errorhandling.TokenVerificationExceptionTestFactory; public class GrpcCheckErrorTestFactory { - public static final String ERROR_MESSAGE = TokenVerificationExceptionTestFactory.MESSAGE; + public static final String ERROR_MESSAGE = CheckTokenResultTestFactory.ERROR_MESSAGE; public static GrpcCheckError create() { return createBuilder().build(); diff --git a/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckGrpcServiceTest.java b/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckGrpcServiceTest.java index 1284b08265bda88a1e4b0c82e65dc6cb9332aa0f..34960d42cfea7bb625aede1d8830b449cb410b7d 100644 --- a/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckGrpcServiceTest.java +++ b/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckGrpcServiceTest.java @@ -60,7 +60,7 @@ class TokenCheckGrpcServiceTest { @BeforeEach void init() { when(samlTokenService.validate(any())).thenReturn(tokenCheckResult); - doReturn(grpcCheckTokenResponse).when(service).buildValidCheckTokenResponse(any()); + doReturn(grpcCheckTokenResponse).when(service).buildCheckResponse(any()); } @Test @@ -71,10 +71,10 @@ class TokenCheckGrpcServiceTest { } @Test - void shouldCallBuildCheckTokenResponse() { + void shouldCallBuildCheckResponse() { checkToken(); - verify(service).buildValidCheckTokenResponse(tokenCheckResult); + verify(service).buildCheckResponse(tokenCheckResult); } @Test diff --git a/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckServiceITCase.java b/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckServiceITCase.java deleted file mode 100644 index 5bde3a7cfd77f48cf2b1c05dffd0197b3a5140bb..0000000000000000000000000000000000000000 --- a/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckServiceITCase.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (c) 2024. - * 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. - */ - -package de.ozgcloud.token; - -import static de.ozgcloud.token.saml.SamlTokenTestUtils.*; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.List; - -import org.jetbrains.annotations.NotNull; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.opensaml.saml.saml2.core.Issuer; -import org.opensaml.saml.saml2.core.Response; - -import de.ozgcloud.common.test.TestUtils; -import de.ozgcloud.token.saml.SamlServiceRegistry; -import de.ozgcloud.token.saml.SamlTokenTestUtils; -import net.shibboleth.utilities.java.support.component.ComponentInitializationException; - -class TokenCheckServiceITCase { - private static final String POSTFACH_ID_BAYERN_ID = "pk-bayern"; - private static final String POSTFACH_ID_MUK = "pk-muk"; - private static final String TRUST_LEVEL = "low"; - private static final String TRUST_LEVEL_NAME_BAYERN_ID = "urn:oid:1.2.40.0.10.2.1.1.261.94"; - private static final String POSTFACH_ID_NAME_BAYERN_ID = "urn:oid:2.5.4.18"; - - @InjectMocks - @Spy - private TokenCheckService service; - - @Mock - private Saml2VerificationService verificationService; - - @Mock - private Saml2DecryptionService decryptionService; - - @Mock - private SamlServiceRegistry samlServiceRegistry; - - @Mock - private Saml2ParseService parseService; - - private String token; - - @Nested - class TestDecryptingAttributes { - @Nested - class TestBayernId { - @BeforeEach - void setup() throws ComponentInitializationException { - var response = initMockSamlResponse(); - when(parseService.parse(anyString())).thenReturn(response); - - var config = SamlTokenTestUtils.initConfig(BAYERN_ID); - when(samlServiceRegistry.getService(IDP_ENTITY_ID_BAYERN_ID)).thenReturn( - config.getService(IDP_ENTITY_ID_BAYERN_ID)); - - token = TestUtils.loadTextFile("SamlResponseBayernId.xml"); - } - - private static @NotNull Response initMockSamlResponse() { - Response response = mock(Response.class); - Issuer issuer = mock(Issuer.class); - when(issuer.getValue()).thenReturn(IDP_ENTITY_ID_BAYERN_ID); - when(response.getIssuer()).thenReturn(issuer); - return response; - } - - @Test - void shouldGetPostfachHandleFromBayernIdToken() { - var attributes = List.of(new TokenAttribute(POSTFACH_ID_NAME_BAYERN_ID, POSTFACH_ID_BAYERN_ID)); - when(decryptionService.decryptAttributes(any(), any(SamlSetting.class))).thenReturn( - attributes); - - TokenValidationResult result = service.getCheckTokenResult(token); - - assertThat(result.getPostfachId()).isEqualTo(POSTFACH_ID_BAYERN_ID); - } - - @Test - void shouldGetTrustLevel() { - var attributes = List.of(new TokenAttribute(TRUST_LEVEL_NAME_BAYERN_ID, TRUST_LEVEL)); - when(decryptionService.decryptAttributes(any(), any(SamlSetting.class))).thenReturn( - attributes); - - TokenValidationResult result = service.getCheckTokenResult(token); - - assertThat(result.getTrustLevel()).isEqualTo(TRUST_LEVEL); - } - } - - @Nested - class TestMuk { - @BeforeEach - void setup() throws ComponentInitializationException { - var response = initMukSamlResponse(); - when(parseService.parse(anyString())).thenReturn(response); - - var config = SamlTokenTestUtils.initConfig(MUK); - when(samlServiceRegistry.getService(IDP_ENTITY_ID_MUK)) - .thenReturn(config.getService(IDP_ENTITY_ID_MUK)); - - token = TestUtils.loadTextFile("SamlResponseMuk.xml"); - } - - private static @NotNull Response initMukSamlResponse() { - Response response = mock(Response.class); - Issuer issuer = mock(Issuer.class); - when(issuer.getValue()).thenReturn(IDP_ENTITY_ID_MUK); - when(response.getIssuer()).thenReturn(issuer); - when(response.getID()).thenReturn(POSTFACH_ID_MUK); - return response; - } - - @Test - void shouldGetPostfachHandleFromMukToken() { - TokenValidationResult result = service.getCheckTokenResult(token); - - assertThat(result.getPostfachId()).isEqualTo(POSTFACH_ID_MUK); - } - } - } -} \ No newline at end of file diff --git a/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckTestConfiguration.java b/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckTestConfiguration.java deleted file mode 100644 index 0545a4faa0e91564ee4b8b0a5449272466f483f7..0000000000000000000000000000000000000000 --- a/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckTestConfiguration.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2024. - * 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. - */ - -package de.ozgcloud.token; - -import java.util.HashMap; - -import org.springframework.boot.context.properties.ConfigurationPropertiesScan; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; - -import de.ozgcloud.token.saml.SamlServiceRegistry; -import net.shibboleth.utilities.java.support.component.ComponentInitializationException; -import net.shibboleth.utilities.java.support.xml.BasicParserPool; -import net.shibboleth.utilities.java.support.xml.ParserPool; - -@ConfigurationPropertiesScan("de.ozgcloud.token") -@EnableConfigurationProperties(TokenValidationProperties.class) -public class TokenCheckTestConfiguration { - @Bean - ParserPool parserPool() throws ComponentInitializationException { - var localParserPool = new BasicParserPool(); - - final var features = SamlTokenUtils.createFeatureMap(); - localParserPool.setBuilderFeatures(features); - localParserPool.setBuilderAttributes(new HashMap<>()); - localParserPool.initialize(); - - return localParserPool; - } - - @Bean - SamlServiceRegistry samlSettingsRegistry() { - return new SamlServiceRegistry(); - } - -} diff --git a/token-checker-server/src/test/java/de/ozgcloud/token/TokenValidationPropertiesITCase.java b/token-checker-server/src/test/java/de/ozgcloud/token/TokenValidationPropertiesITCase.java deleted file mode 100644 index 364f61eec6c2b6b58c03147198d68e85a81bea20..0000000000000000000000000000000000000000 --- a/token-checker-server/src/test/java/de/ozgcloud/token/TokenValidationPropertiesITCase.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (c) 2024. - * 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. - */ - -package de.ozgcloud.token; - -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.TestPropertySource; - -@SpringBootTest(classes = { TokenCheckTestConfiguration.class }) -class TokenValidationPropertiesITCase { - private static final String URL = "https=//infra-pre-id.bayernportal.de/idp"; - private static final String TRUST_LEVEL_KEY = "trustLevel"; - private static final String TRUST_LEVEL_VALUE = "urn=oid:1.2.3.4"; - private static final String POSTFACH_ID_KEY = "postfachId"; - private static final String POSTFACH_ID_VALUE = "urn=oid:2.5.4.18"; - - @DisplayName("Test loading token checker configuration") - @Nested - @TestPropertySource(properties = { - TokenValidationProperties.PREFIX + ".entities[0].idpEntityId=" + TokenValidationPropertiesITCase.URL, - TokenValidationProperties.PREFIX + ".entities[0].key=classpath:test2-enc.key", - TokenValidationProperties.PREFIX + ".entities[0].certificate=classpath:test2-enc.crt", - TokenValidationProperties.PREFIX + ".entities[0].metadata=classpath:metadata/bayernid-idp-infra.xml", - TokenValidationProperties.PREFIX + ".entities[0].mappings.postfachId=" + TokenValidationPropertiesITCase.POSTFACH_ID_VALUE, - TokenValidationProperties.PREFIX + ".entities[0].mappings.trustLevel=" + TokenValidationPropertiesITCase.TRUST_LEVEL_VALUE - }) - class TestLoadingConfiguration { - @Autowired - private TokenValidationProperties tokenValidationProperties; - - @Nested - class TestInitialization { - @Test - void shouldHaveProperties() { - assertThat(tokenValidationProperties).isNotNull(); - } - - @Test - void shouldHaveEntities() { - assertThat(tokenValidationProperties.getEntities()).isNotNull(); - } - } - - @Nested - class TestLoadedEntity { - @Test - void shouldHaveIdpEntityId() { - assertThat(tokenValidationProperties.getEntities().getFirst().getIdpEntityId()).isEqualTo(URL); - } - - @Test - void shouldHaveDevEncKey() { - assertThat(tokenValidationProperties.getEntities().getFirst().getKey()).isNotNull(); - } - - @Test - void shouldHaveDevEncCrt() { - assertThat(tokenValidationProperties.getEntities().getFirst().getCertificate()).isNotNull(); - } - - @Test - void shouldHaveMetadata() { - assertThat(tokenValidationProperties.getEntities().getFirst().getMetadata()).isNotNull(); - } - - @Test - void shouldHavePostkorbHandleMapping() { - assertThat(tokenValidationProperties.getEntities().getFirst().getMappings()).containsEntry(POSTFACH_ID_KEY, POSTFACH_ID_VALUE); - } - - @Test - void shouldNotHaveUseIdAsPostkorbHandle() { - assertThat(tokenValidationProperties.getEntities().getFirst().getUserIdAsPostfachId()).isFalse(); - } - - @Test - void shouldHaveConfiguredTrustLevelMapping() { - assertThat(tokenValidationProperties.getEntities().getFirst().getMappings()).containsEntry(TRUST_LEVEL_KEY, TRUST_LEVEL_VALUE); - } - } - } - - @DisplayName("Test loading mapping") - @TestPropertySource(properties = { - TokenValidationProperties.PREFIX + ".entities[0].idpEntityId=" + URL, - TokenValidationProperties.PREFIX + ".entities[0].key=classpath:test2-enc.key", - TokenValidationProperties.PREFIX + ".entities[0].certificate=classpath:test2-enc.crt", - TokenValidationProperties.PREFIX + ".entities[0].metadata=classpath:metadata/bayernid-idp-infra.xml", - TokenValidationProperties.PREFIX + ".entities[0]use-id-as-postfach-id=true", - TokenValidationProperties.PREFIX + ".entities[0].mappings.test=test2", - }) - @Nested - class TestLoadingMappingConfiguration { - @Autowired - private TokenValidationProperties tokenValidationProperties; - - @Test - void shouldHaveUseIdAsPostfachId() { - assertThat(tokenValidationProperties.getEntities().getFirst().getUserIdAsPostfachId()).isTrue(); - } - - @Test - void shouldHaveConfiguredTestMapping() { - assertThat(tokenValidationProperties.getEntities().getFirst().getMappings()).containsEntry("test", "test2"); - } - - @Test - void shouldNotHavePostkorbHandleMapping() { - assertThat(tokenValidationProperties.getEntities().getFirst().getMappings()).doesNotContain(entry(POSTFACH_ID_KEY, - POSTFACH_ID_VALUE)); - } - } -} \ No newline at end of file diff --git a/token-checker-server/src/test/java/de/ozgcloud/token/common/errorhandling/TokenVerificationExceptionTestFactory.java b/token-checker-server/src/test/java/de/ozgcloud/token/common/errorhandling/TokenVerificationExceptionTestFactory.java deleted file mode 100644 index 9885018ae9c5b29278ba881bcb8d6305946dbafb..0000000000000000000000000000000000000000 --- a/token-checker-server/src/test/java/de/ozgcloud/token/common/errorhandling/TokenVerificationExceptionTestFactory.java +++ /dev/null @@ -1,23 +0,0 @@ -package de.ozgcloud.token.common.errorhandling; - -import java.util.List; - -import org.springframework.security.saml2.core.Saml2Error; - -import com.thedeanda.lorem.LoremIpsum; - -public class TokenVerificationExceptionTestFactory { - - public static final String MESSAGE = LoremIpsum.getInstance().getWords(5); - public static final String ERROR_CODE = LoremIpsum.getInstance().getWords(1); - public static final String ERROR_DESCRIPTION = LoremIpsum.getInstance().getWords(6); - - public static TokenVerificationException create() { - return new TokenVerificationException(MESSAGE, List.of(createSaml2Error())); - } - - public static Saml2Error createSaml2Error() { - return new Saml2Error(ERROR_CODE, ERROR_DESCRIPTION); - } - -} diff --git a/token-checker-server/src/test/java/de/ozgcloud/token/saml/Saml2VerificationServiceITCase.java b/token-checker-server/src/test/java/de/ozgcloud/token/saml/Saml2VerificationServiceITCase.java deleted file mode 100644 index 7ac391c1450ba5083a6511d70f4727f052930df9..0000000000000000000000000000000000000000 --- a/token-checker-server/src/test/java/de/ozgcloud/token/saml/Saml2VerificationServiceITCase.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2024. - * 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. - */ - -package de.ozgcloud.token.saml; - -import static de.ozgcloud.token.saml.Saml2VerificationService.*; -import static org.assertj.core.api.Assertions.*; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport; -import org.opensaml.saml.saml2.core.Response; -import org.opensaml.saml.saml2.core.impl.ResponseUnmarshaller; -import org.opensaml.saml.security.impl.SAMLSignatureProfileValidator; - -import de.ozgcloud.common.test.TestUtils; -import net.shibboleth.utilities.java.support.component.ComponentInitializationException; - -class Saml2VerificationServiceITCase { - private Saml2VerificationService verifier; - - @BeforeEach - void setup() throws ComponentInitializationException { - var parserPool = SamlTokenTestUtils.initParserPool(); - - var samlSettingsRegistry = SamlTokenTestUtils.initConfig(SamlTokenTestUtils.BAYERN_ID); - - var responseUnmarshaller = (ResponseUnmarshaller) XMLObjectProviderRegistrySupport.getUnmarshallerFactory() - .getUnmarshaller(Response.DEFAULT_ELEMENT_NAME); - var parser = new Saml2ParseService(parserPool, responseUnmarshaller); - - verifier = new Saml2VerificationService(parser, samlSettingsRegistry, new SAMLSignatureProfileValidator()); - } - - @Test - void shouldGetVerificationErrorInvalidSignature() { - var samlResponse = TestUtils.loadTextFile("SamlResponseBayernId.xml"); - - var res = verifier.verify(samlResponse); - - assertThat(res.getFirst().getErrorCode()).isEqualTo("invalid_signature"); - assertThat(res.getFirst().getDescription()).startsWith(INVALID_SIGNATURE); - } - - @Test - void shouldGetVerificationErrorNoSignature() { - var samlResponse = TestUtils.loadTextFile("BrokenSamlResponseNoSignature.xml"); - - var res = verifier.verify(samlResponse); - - assertThat(res.getFirst().getErrorCode()).isEqualTo("invalid_signature"); - assertThat(res.getFirst().getDescription()).isEqualTo(SIGNATURE_MISSING); - } - - @Test - void shouldGetVerificationErrorNoReference() { - var samlResponse = TestUtils.loadTextFile("BrokenSamlResponseNoReference.xml"); - - var res = verifier.verify(samlResponse); - - assertThat(res.getFirst().getErrorCode()).isEqualTo("invalid_signature"); - assertThat(res.getFirst().getDescription()).startsWith(INVALID_SIGNATURE_PROFILE); - } -} \ No newline at end of file diff --git a/token-checker-server/src/test/java/de/ozgcloud/token/saml/SamlTokenTestUtils.java b/token-checker-server/src/test/java/de/ozgcloud/token/saml/SamlTokenTestUtils.java deleted file mode 100644 index 78fdfc3edfe1d1fcffb3b0578a36804956ba329e..0000000000000000000000000000000000000000 --- a/token-checker-server/src/test/java/de/ozgcloud/token/saml/SamlTokenTestUtils.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2024. - * 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. - */ - -package de.ozgcloud.token.saml; - -import static de.ozgcloud.token.TokenCheckService.*; -import static org.mockito.Mockito.*; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.jetbrains.annotations.NotNull; -import org.springframework.core.io.InputStreamResource; - -import de.ozgcloud.common.test.TestUtils; -import de.ozgcloud.token.TokenCheckerConfiguration; -import de.ozgcloud.token.TokenValidationProperties; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import net.shibboleth.utilities.java.support.component.ComponentInitializationException; -import net.shibboleth.utilities.java.support.xml.BasicParserPool; -import net.shibboleth.utilities.java.support.xml.ParserPool; - -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class SamlTokenTestUtils { - public static final String BAYERN_ID = "bayernId"; - public static final String MUK = "muk"; - public static final String IDP_ENTITY_ID_BAYERN_ID = "https://infra-pre-id.bayernportal.de/idp"; - public static final String IDP_ENTITY_ID_MUK = "https://e4k-portal.een.elster.de"; - - static ParserPool initParserPool() throws ComponentInitializationException { - var localParserPool = new BasicParserPool(); - - final var features = SamlTokenUtils.createFeatureMap(); - localParserPool.setBuilderFeatures(features); - localParserPool.setBuilderAttributes(new HashMap<>()); - localParserPool.initialize(); - - return localParserPool; - } - - public static SamlServiceRegistry initConfig(String type) throws ComponentInitializationException { - TokenValidationProperties properties = null; - if (BAYERN_ID.equals(type)) { - properties = initProperties(); - } else if (MUK.equals(type)) { - properties = initMukProperties(); - } - - var samlSettingsRegistry = new SamlServiceRegistry(); - var config = new TokenCheckerConfiguration(properties, initParserPool(), samlSettingsRegistry); - config.initOpenSAML(); - - return samlSettingsRegistry; - } - - static @NotNull TokenValidationProperties initProperties() { - TokenValidationProperties properties = mock(TokenValidationProperties.class); - var entity = new ConfigurationEntity(); - entity.setIdpEntityId(IDP_ENTITY_ID_BAYERN_ID); - entity.setCertificate(new InputStreamResource(TestUtils.loadFile("test1-enc.crt"))); - entity.setKey(new InputStreamResource(TestUtils.loadFile("test1-enc.key"))); - entity.setMetadata(new InputStreamResource(TestUtils.loadFile("metadata/bayernid-idp-infra.xml"))); - entity.setMappings(Map.of(POSTFACH_ID_KEY, "urn:oid:2.5.4.18", TRUST_LEVEL_KEY, "urn:oid:1.2.40.0.10.2.1.1.261.94")); - when(properties.getEntities()).thenReturn(List.of(entity)); - return properties; - } - - static @NotNull TokenValidationProperties initMukProperties() { - TokenValidationProperties properties = mock(TokenValidationProperties.class); - var entity = new ConfigurationEntity(); - entity.setIdpEntityId(IDP_ENTITY_ID_MUK); - entity.setCertificate(new InputStreamResource(TestUtils.loadFile("test3-enc.crt"))); - entity.setKey(new InputStreamResource(TestUtils.loadFile("test3-enc.key"))); - entity.setMetadata(new InputStreamResource(TestUtils.loadFile("metadata/muk-idp-e4k.xml"))); - entity.setMappings(Map.of(TRUST_LEVEL_KEY, "Elster")); - entity.setUseIdAsPostfachId(true); - when(properties.getEntities()).thenReturn(List.of(entity)); - return properties; - } -}