diff --git a/token-checker-server/src/main/java/de/ozgcloud/token/CheckErrorMapper.java b/token-checker-server/src/main/java/de/ozgcloud/token/CheckErrorMapper.java index b5d16fab65ad0da43b974bdbb09543295b7cf4b6..7cd1e55ac39a2f16b9424d6974d3ab6d0a512d0b 100644 --- a/token-checker-server/src/main/java/de/ozgcloud/token/CheckErrorMapper.java +++ b/token-checker-server/src/main/java/de/ozgcloud/token/CheckErrorMapper.java @@ -2,24 +2,9 @@ package de.ozgcloud.token; import org.mapstruct.CollectionMappingStrategy; import org.mapstruct.Mapper; -import org.mapstruct.Mapping; import org.mapstruct.ReportingPolicy; -import de.ozgcloud.token.common.errorhandling.TokenVerificationException; - @Mapper(unmappedTargetPolicy = ReportingPolicy.WARN, collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED) public interface CheckErrorMapper { - @Mapping(target = "mergeFrom", ignore = true) - @Mapping(target = "clearField", ignore = true) - @Mapping(target = "clearOneof", ignore = true) - @Mapping(target = "mergeUnknownFields", ignore = true) - @Mapping(target = "removeSamlError", ignore = true) - @Mapping(target = "messageBytes", ignore = true) - @Mapping(target = "unknownFields", ignore = true) - @Mapping(target = "allFields", ignore = true) - @Mapping(target = "samlErrorBuilderList", ignore = true) - @Mapping(target = "samlErrorOrBuilderList", ignore = true) - @Mapping(target = "samlErrorList", source = "errorList") - GrpcCheckError fromTokenVerificationException(TokenVerificationException exception); } diff --git a/token-checker-server/src/main/java/de/ozgcloud/token/CheckTokenResult.java b/token-checker-server/src/main/java/de/ozgcloud/token/CheckTokenResult.java deleted file mode 100644 index cf80f217e81a4a363cfd48b0d75573d310b7fb58..0000000000000000000000000000000000000000 --- a/token-checker-server/src/main/java/de/ozgcloud/token/CheckTokenResult.java +++ /dev/null @@ -1,36 +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.List; - -import lombok.Builder; -import lombok.EqualsAndHashCode; -import lombok.Getter; - -@Builder -@Getter -@EqualsAndHashCode -public class CheckTokenResult { - private String postfachId; - private String trustLevel; - private List<TokenAttribute> attributes; -} diff --git a/token-checker-server/src/main/java/de/ozgcloud/token/CheckTokenResultMapper.java b/token-checker-server/src/main/java/de/ozgcloud/token/CheckTokenResultMapper.java index b87d56a020135758c2d993192f22640b9c6d78d3..85a1c7b77df577fad1c7426ec06d89b47c6c6f45 100644 --- a/token-checker-server/src/main/java/de/ozgcloud/token/CheckTokenResultMapper.java +++ b/token-checker-server/src/main/java/de/ozgcloud/token/CheckTokenResultMapper.java @@ -28,18 +28,28 @@ import org.mapstruct.ReportingPolicy; @Mapper(unmappedTargetPolicy = ReportingPolicy.WARN, collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED) interface CheckTokenResultMapper { - @Mapping(target = "mergeFrom", ignore = true) - @Mapping(target = "clearField", ignore = true) - @Mapping(target = "clearOneof", ignore = true) - @Mapping(target = "mergeUnknownFields", ignore = true) @Mapping(target = "unknownFields", ignore = true) - @Mapping(target = "allFields", ignore = true) + @Mapping(target = "trustLevelBytes", ignore = true) @Mapping(target = "removeOtherFields", ignore = true) @Mapping(target = "postfachIdBytes", ignore = true) - @Mapping(target = "trustLevelBytes", ignore = true) @Mapping(target = "otherFieldsOrBuilderList", ignore = true) + @Mapping(target = "otherFieldsList", ignore = true) @Mapping(target = "otherFieldsBuilderList", ignore = true) - @Mapping(target = "otherFieldsList", source = "attributes") - GrpcCheckTokenResult toCheckTokenResult(CheckTokenResult result); + @Mapping(target = "mergeUnknownFields", ignore = true) + @Mapping(target = "mergeFrom", ignore = true) + @Mapping(target = "defaultInstanceForType", ignore = true) + @Mapping(target = "clearOneof", ignore = true) + @Mapping(target = "clearField", ignore = true) + @Mapping(target = "allFields", ignore = true) + GrpcTokenAttributes toTokenAttributes(TokenValidationResult validationResult); + @Mapping(target = "unknownFields", ignore = true) + @Mapping(target = "messageBytes", ignore = true) + @Mapping(target = "mergeUnknownFields", ignore = true) + @Mapping(target = "mergeFrom", ignore = true) + @Mapping(target = "defaultInstanceForType", ignore = true) + @Mapping(target = "clearOneof", ignore = true) + @Mapping(target = "clearField", ignore = true) + @Mapping(target = "allFields", ignore = true) + GrpcCheckError toCheckError(TokenValidationResult validationResult); } diff --git a/token-checker-server/src/main/java/de/ozgcloud/token/TokenCheckGrpcService.java b/token-checker-server/src/main/java/de/ozgcloud/token/TokenCheckGrpcService.java index 02340e8d285200399434b92b94589db479b46371..2b19192b0b09107cfacfb3970165b06f57f4931b 100644 --- a/token-checker-server/src/main/java/de/ozgcloud/token/TokenCheckGrpcService.java +++ b/token-checker-server/src/main/java/de/ozgcloud/token/TokenCheckGrpcService.java @@ -20,7 +20,7 @@ package de.ozgcloud.token; -import de.ozgcloud.token.common.errorhandling.TokenVerificationException; +import de.ozgcloud.token.saml.SamlTokenService; import io.grpc.stub.StreamObserver; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; @@ -30,32 +30,31 @@ import net.devh.boot.grpc.server.service.GrpcService; @GrpcService @RequiredArgsConstructor public class TokenCheckGrpcService extends TokenCheckServiceGrpc.TokenCheckServiceImplBase { - private final TokenCheckService tokenCheckerService; + + private final SamlTokenService samlTokenService; private final CheckTokenResultMapper tokenCheckMapper; - private final CheckErrorMapper checkErrorMapper; @Override public void checkToken(GrpcCheckTokenRequest request, StreamObserver<GrpcCheckTokenResponse> responseStreamObserver) { - try { - var result = tokenCheckerService.checkToken(request.getToken()); - responseStreamObserver.onNext(buildValidCheckTokenResponse(result)); - } catch (TokenVerificationException e) { - responseStreamObserver.onNext(buildInvalidCheckTokenResponse(e)); - } finally { - responseStreamObserver.onCompleted(); - } + var result = samlTokenService.validate(request.getToken()); + responseStreamObserver.onNext(buildResponse(result)); + responseStreamObserver.onCompleted(); + } + + GrpcCheckTokenResponse buildResponse(TokenValidationResult result) { + return result.isValid() ? buildValidCheckTokenResponse(result) : buildInvalidCheckTokenResponse(result); } - GrpcCheckTokenResponse buildValidCheckTokenResponse(CheckTokenResult result) { + GrpcCheckTokenResponse buildValidCheckTokenResponse(TokenValidationResult result) { return GrpcCheckTokenResponse.newBuilder() .setTokenValid(true) - .setTokenCheckResult(tokenCheckMapper.toCheckTokenResult(result)).build(); + .setTokenAttributes(tokenCheckMapper.toTokenAttributes(result)).build(); } - GrpcCheckTokenResponse buildInvalidCheckTokenResponse(TokenVerificationException exception) { + GrpcCheckTokenResponse buildInvalidCheckTokenResponse(TokenValidationResult result) { return GrpcCheckTokenResponse.newBuilder() .setTokenValid(false) - .setCheckError(checkErrorMapper.fromTokenVerificationException(exception)) + .setCheckError(tokenCheckMapper.toCheckError(result)) .build(); } } diff --git a/token-checker-server/src/main/java/de/ozgcloud/token/TokenCheckProperties.java b/token-checker-server/src/main/java/de/ozgcloud/token/TokenCheckProperties.java deleted file mode 100644 index 14b28018de256036bcde2662a39023e3caab26a4..0000000000000000000000000000000000000000 --- a/token-checker-server/src/main/java/de/ozgcloud/token/TokenCheckProperties.java +++ /dev/null @@ -1,43 +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.List; - -import jakarta.validation.constraints.NotEmpty; - -import org.springframework.boot.context.properties.ConfigurationProperties; - -import de.ozgcloud.token.saml.ConfigurationEntity; -import lombok.Getter; -import lombok.Setter; - -@Setter -@Getter -@ConfigurationProperties(prefix = TokenCheckProperties.PREFIX) -public class TokenCheckProperties { - static final String PREFIX = "ozgcloud.token.check"; - /** - * List of entities. A ConfigurationEntity contains the necessary information for verifying and decrypting saml tokens. - */ - @NotEmpty - private List<ConfigurationEntity> entities; -} diff --git a/token-checker-server/src/main/java/de/ozgcloud/token/TokenCheckService.java b/token-checker-server/src/main/java/de/ozgcloud/token/TokenCheckService.java index e17946eee4052ae7e3f951e428ad1a12fdf6348f..82b191b70d9037ec77df9e38673557ea378c91d1 100644 --- a/token-checker-server/src/main/java/de/ozgcloud/token/TokenCheckService.java +++ b/token-checker-server/src/main/java/de/ozgcloud/token/TokenCheckService.java @@ -31,21 +31,22 @@ import de.ozgcloud.token.saml.Saml2DecryptionService; import de.ozgcloud.token.saml.Saml2ParseService; import de.ozgcloud.token.saml.Saml2VerificationService; import de.ozgcloud.token.saml.SamlSetting; -import de.ozgcloud.token.saml.SamlSettingsRegistry; +import de.ozgcloud.token.saml.SamlServiceRegistry; import lombok.RequiredArgsConstructor; @Service @RequiredArgsConstructor public class TokenCheckService { + public static final String POSTFACH_ID_KEY = "postfachId"; public static final String TRUST_LEVEL_KEY = "trustLevel"; - private final SamlSettingsRegistry samlSettingsRegistry; + private final SamlServiceRegistry samlServiceRegistry; private final Saml2DecryptionService decryptionService; private final Saml2ParseService parseService; private final Saml2VerificationService verificationService; - public CheckTokenResult checkToken(final String token) { + public TokenValidationResult checkToken(final String token) { var errors = verificationService.verify(token); if (errors.isEmpty()) { return getCheckTokenResult(token); @@ -53,15 +54,15 @@ public class TokenCheckService { throw new TokenVerificationException("Errors occurred while checking token", errors); } - CheckTokenResult getCheckTokenResult(final String token) { + TokenValidationResult getCheckTokenResult(final String token) { var response = parseService.parse(token); - var samlSetting = samlSettingsRegistry.getSetting(response.getIssuer().getValue()); + var samlSetting = samlServiceRegistry.getService(response.getIssuer().getValue()); return buildCheckTokenResult(samlSetting, response); } - CheckTokenResult buildCheckTokenResult(SamlSetting samlSetting, Response response) { + TokenValidationResult buildCheckTokenResult(SamlSetting samlSetting, Response response) { var decryptedAttributes = decryptionService.decryptAttributes(response, samlSetting); - return CheckTokenResult.builder() + return TokenValidationResult.builder() .attributes(decryptedAttributes) .postfachId(getPostfachId(samlSetting, response, decryptedAttributes)) .trustLevel(findAttributeByKey(TRUST_LEVEL_KEY, decryptedAttributes, samlSetting)) diff --git a/token-checker-server/src/main/java/de/ozgcloud/token/saml/Saml2VerificationService.java b/token-checker-server/src/main/java/de/ozgcloud/token/saml/Saml2VerificationService.java index 3ceac79566bbe8d57f9aaeb3402eff2c320800a6..d6cd3b7fdc9a9cb85881acd03b17494d0c3d284a 100644 --- a/token-checker-server/src/main/java/de/ozgcloud/token/saml/Saml2VerificationService.java +++ b/token-checker-server/src/main/java/de/ozgcloud/token/saml/Saml2VerificationService.java @@ -47,7 +47,7 @@ public class Saml2VerificationService { static final String FORMAT = " [%s]: "; private final Saml2ParseService parser; - private final SamlSettingsRegistry samlSettingsRegistry; + private final SamlServiceRegistry samlServiceRegistry; private final SAMLSignatureProfileValidator profileValidator; @@ -78,7 +78,7 @@ public class Saml2VerificationService { } void validateSignature(Response response, List<Saml2Error> errors) { - var samlSetting = samlSettingsRegistry.getSetting(response.getIssuer().getValue()); + var samlSetting = samlServiceRegistry.getService(response.getIssuer().getValue()); try { if (!samlSetting.getTrustEngine().validate(Objects.requireNonNull(response.getSignature()), samlSetting.getCriteriaSet())) { errors.add(new Saml2Error(Saml2ErrorCodes.INVALID_SIGNATURE, INVALID_SIGNATURE + FORMAT.formatted(response.getID()))); diff --git a/token-checker-server/src/main/java/de/ozgcloud/token/saml/SamlConfiguration.java b/token-checker-server/src/main/java/de/ozgcloud/token/saml/SamlConfiguration.java index 765249041fe488427e299d744c89f1db216f5422..2376beab0c93654b3233ef461e561d50fab9f730 100644 --- a/token-checker-server/src/main/java/de/ozgcloud/token/saml/SamlConfiguration.java +++ b/token-checker-server/src/main/java/de/ozgcloud/token/saml/SamlConfiguration.java @@ -47,8 +47,8 @@ public class SamlConfiguration { return registryBuilder.build(); } - SamlTokenService samlTokenService(TokenValidationProperties.TokenValidationProperty tokenValidationProperty) { - return SamlTokenService.builder() + SamlTokenValidationService samlTokenService(TokenValidationProperties.TokenValidationProperty tokenValidationProperty) { + return SamlTokenValidationService.builder() .signatureTrustEngine(samlTrustEngineFactory.buildSamlTrustEngine(tokenValidationProperty)) .decrypter(samlDecrypterFactory.buildDecrypter(tokenValidationProperty)) .verificationCriteria(buildVerificationCriteria(tokenValidationProperty.getIdpEntityId())) diff --git a/token-checker-server/src/main/java/de/ozgcloud/token/saml/SamlServiceRegistry.java b/token-checker-server/src/main/java/de/ozgcloud/token/saml/SamlServiceRegistry.java index 3bf3defd0ed90414022aa3b3b1071c1b8d510a0d..6e1afcb853a1cefc4733dab265b919f6a89e583a 100644 --- a/token-checker-server/src/main/java/de/ozgcloud/token/saml/SamlServiceRegistry.java +++ b/token-checker-server/src/main/java/de/ozgcloud/token/saml/SamlServiceRegistry.java @@ -30,9 +30,9 @@ import lombok.Singular; public class SamlServiceRegistry { @Singular - private final Map<String, SamlTokenService> samlServices; + private final Map<String, SamlTokenValidationService> samlServices; - public Optional<SamlTokenService> getSetting(String idpEntityId) { + public Optional<SamlTokenValidationService> getService(String idpEntityId) { return Optional.ofNullable(samlServices.get(idpEntityId)); } } diff --git a/token-checker-server/src/main/java/de/ozgcloud/token/saml/SamlTokenUtils.java b/token-checker-server/src/main/java/de/ozgcloud/token/saml/SamlTokenUtils.java index 85c44f9bd0664bcc676ccee7b38c22f9e539c6ba..a5d0929fdb414692571aaea9541efd682037ca55 100644 --- a/token-checker-server/src/main/java/de/ozgcloud/token/saml/SamlTokenUtils.java +++ b/token-checker-server/src/main/java/de/ozgcloud/token/saml/SamlTokenUtils.java @@ -50,11 +50,6 @@ import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) public class SamlTokenUtils { - public static final String FEATURES_EXTERNAL_GENERAL_ENTITIES = "http://xml.org/sax/features/external-general-entities"; - public static final String FEATURES_EXTERNAL_PARAMETER_ENTITIES = "http://xml.org/sax/features/external-parameter-entities"; - public static final String FEATURES_DISALLOW_DOCTYPE_DECL = "http://apache.org/xml/features/disallow-doctype-decl"; - public static final String VALIDATION_SCHEMA_NORMALIZED_VALUE = "http://apache.org/xml/features/validation/schema/normalized-value"; - public static final String FEATURE_SECURE_PROCESSING = "http://javax.xml.XMLConstants/feature/secure-processing"; public static final String NO_CERTIFICATE_LOCATION_SPECIFIED = "No certificate location specified"; public static final String NO_PRIVATE_KEY_LOCATION_SPECIFIED = "No private key location specified"; diff --git a/token-checker-server/src/test/java/de/ozgcloud/token/CheckErrorMapperTest.java b/token-checker-server/src/test/java/de/ozgcloud/token/CheckErrorMapperTest.java index 93c2fa542a36dec51bbdd2b776fc09bf049356d4..f821db9c8f4ce6d901e1a874c4a1e9640de75a89 100644 --- a/token-checker-server/src/test/java/de/ozgcloud/token/CheckErrorMapperTest.java +++ b/token-checker-server/src/test/java/de/ozgcloud/token/CheckErrorMapperTest.java @@ -20,7 +20,7 @@ class CheckErrorMapperTest { var exception = TokenVerificationExceptionTestFactory.create(); var expectedCheckError = GrpcCheckErrorTestFactory.createBuilder().setMessage(exception.getMessage()).build(); - var checkError = mapper.fromTokenVerificationException(exception); + var checkError = mapper.toCheckError(exception); assertThat(checkError).isEqualTo(expectedCheckError); } 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 bc247c1de9dffb358e7a097f7b80fdd5ee23448e..642d0bf71cb53a744fcd0255d76a740c11da862e 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 @@ -33,12 +33,12 @@ public class CheckTokenResultTestFactory { public static final String TRUST_LEVEL = "LOW"; public static final TokenAttribute OTHER_FIELD = TokenAttributeTestFactory.create(); - static CheckTokenResult create() { + static TokenValidationResult create() { return createBuilder().build(); } - static CheckTokenResult.CheckTokenResultBuilder createBuilder() { - return new CheckTokenResult.CheckTokenResultBuilder() + static TokenValidationResult.CheckTokenResultBuilder createBuilder() { + return new TokenValidationResult.CheckTokenResultBuilder() .postfachId(POSTFACH_ID) .trustLevel(TRUST_LEVEL) .attributes(List.of(OTHER_FIELD)); diff --git a/token-checker-server/src/test/java/de/ozgcloud/token/GrpcCheckTokenResponseTestFactory.java b/token-checker-server/src/test/java/de/ozgcloud/token/GrpcCheckTokenResponseTestFactory.java index bb77482f894ba707309a9cff37f716b030e977e4..29018f7df075d32253623835dfa4f01574cd7363 100644 --- a/token-checker-server/src/test/java/de/ozgcloud/token/GrpcCheckTokenResponseTestFactory.java +++ b/token-checker-server/src/test/java/de/ozgcloud/token/GrpcCheckTokenResponseTestFactory.java @@ -26,7 +26,7 @@ import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) class GrpcCheckTokenResponseTestFactory { - public static final GrpcCheckTokenResult CHECK_TOKEN_RESULT = GrpcTokenCheckResultTestFactory.create(); + public static final GrpcCheckTokenResponse CHECK_TOKEN_RESULT = GrpcTokenCheckResultTestFactory.create(); public static GrpcCheckTokenResponse createValid() { return createValidBuilder().build(); diff --git a/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckApplicationTest.java b/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckApplicationTest.java index 357ce6c515ebcabe5863ee82cb1545df0fd2cbac..e664f6c63bba0462c670adc291ea86257e067778 100644 --- a/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckApplicationTest.java +++ b/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckApplicationTest.java @@ -20,8 +20,6 @@ package de.ozgcloud.token; -import static org.assertj.core.api.Assertions.*; - import org.junit.jupiter.api.Test; import net.shibboleth.utilities.java.support.component.ComponentInitializationException; @@ -32,8 +30,8 @@ class TokenCheckApplicationTest { void shouldCreateParserPool() throws ComponentInitializationException { TokenCheckApplication application = new TokenCheckApplication(); - var parserPool = application.parserPool(); +// var parserPool = application.parserPool(); - assertThat(parserPool).isNotNull(); +// assertThat(parserPool).isNotNull(); } } \ No newline at end of file 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 a1c0a3c5a61e8ef37dbdcbcffdddf98b6b976378..26538c8c2811500519ca97485696e5d1357f33d3 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 @@ -33,6 +33,7 @@ import org.mockito.Spy; import de.ozgcloud.token.common.errorhandling.TokenVerificationException; import de.ozgcloud.token.common.errorhandling.TokenVerificationExceptionTestFactory; +import de.ozgcloud.token.saml.SamlTokenService; import io.grpc.stub.StreamObserver; class TokenCheckGrpcServiceTest { @@ -41,21 +42,18 @@ class TokenCheckGrpcServiceTest { private TokenCheckGrpcService service; @Mock - private TokenCheckService tokenCheckerService; + private SamlTokenService samlTokenService; @Mock private CheckTokenResultMapper tokenCheckMapper; - @Mock - private CheckErrorMapper checkErrorMapper; - @Mock private StreamObserver<GrpcCheckTokenResponse> tokenStreamObserver; @Nested class TestCheckToken { - private final CheckTokenResult tokenCheckResult = CheckTokenResultTestFactory.create(); + private final TokenValidationResult tokenCheckResult = CheckTokenResultTestFactory.create(); @Test void shouldCallTokenCheckerService() { @@ -63,7 +61,7 @@ class TokenCheckGrpcServiceTest { checkToken(); - verify(tokenCheckerService).checkToken(GrpcCheckTokenRequestTestFactory.TOKEN); + verify(samlTokenService).checkToken(GrpcCheckTokenRequestTestFactory.TOKEN); } @Nested @@ -72,7 +70,7 @@ class TokenCheckGrpcServiceTest { @BeforeEach void givenValidToken() { - when(tokenCheckerService.checkToken(any())).thenReturn(tokenCheckResult); + when(samlTokenService.checkToken(any())).thenReturn(tokenCheckResult); doReturn(validResponse).when(service).buildValidCheckTokenResponse(any()); } @@ -105,7 +103,7 @@ class TokenCheckGrpcServiceTest { @BeforeEach void givenValidToken() { - doThrow(exception).when(tokenCheckerService).checkToken(any()); + doThrow(exception).when(samlTokenService).checkToken(any()); doReturn(invalidResponse).when(service).buildInvalidCheckTokenResponse(exception); } @@ -139,18 +137,18 @@ class TokenCheckGrpcServiceTest { @Nested class TestBuildValidCheckTokenResponse { - private CheckTokenResult tokenCheckResult = CheckTokenResultTestFactory.create(); + private TokenValidationResult tokenCheckResult = CheckTokenResultTestFactory.create(); @BeforeEach void mock() { - when(tokenCheckMapper.toCheckTokenResult(any())).thenReturn(GrpcCheckTokenResponseTestFactory.CHECK_TOKEN_RESULT); + when(tokenCheckMapper.toTokenAttributes(any())).thenReturn(GrpcCheckTokenResponseTestFactory.CHECK_TOKEN_RESULT); } @Test void shouldCallMapper() { buildCheckTokenResponse(); - verify(tokenCheckMapper).toCheckTokenResult(tokenCheckResult); + verify(tokenCheckMapper).toTokenAttributes(tokenCheckResult); } @Test @@ -172,14 +170,14 @@ class TokenCheckGrpcServiceTest { @BeforeEach void mock() { - when(checkErrorMapper.fromTokenVerificationException(any())).thenReturn(GrpcCheckErrorTestFactory.create()); + when(checkErrorMapper.toCheckError(any())).thenReturn(GrpcCheckErrorTestFactory.create()); } @Test void shouldCallMapper() { buildCheckTokenResponse(); - verify(checkErrorMapper).fromTokenVerificationException(exception); + verify(checkErrorMapper).toCheckError(exception); } @Test diff --git a/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckMapperTest.java b/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckMapperTest.java index f01f5c0e8ba9d3a0e4fa3061258e548444bd0fba..c092c009d92520008543cde6cddbb037713e5f5b 100644 --- a/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckMapperTest.java +++ b/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckMapperTest.java @@ -54,7 +54,7 @@ class TokenCheckMapperTest { } private GrpcCheckTokenResult toTokenCheckResult() { - return mapper.toCheckTokenResult(CheckTokenResultTestFactory.create()); + return mapper.toTokenAttributes(CheckTokenResultTestFactory.create()); } } } \ No newline at end of file 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 index 321e1952356d74313c93a310dcbe6dc201642586..ae4912de8c1117067b58284a87435ab68c829f33 100644 --- a/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckServiceITCase.java +++ b/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckServiceITCase.java @@ -42,7 +42,7 @@ import de.ozgcloud.token.saml.Saml2DecryptionService; import de.ozgcloud.token.saml.Saml2ParseService; import de.ozgcloud.token.saml.Saml2VerificationService; import de.ozgcloud.token.saml.SamlSetting; -import de.ozgcloud.token.saml.SamlSettingsRegistry; +import de.ozgcloud.token.saml.SamlServiceRegistry; import de.ozgcloud.token.saml.SamlTokenTestUtils; import net.shibboleth.utilities.java.support.component.ComponentInitializationException; @@ -64,7 +64,7 @@ class TokenCheckServiceITCase { private Saml2DecryptionService decryptionService; @Mock - private SamlSettingsRegistry samlSettingsRegistry; + private SamlServiceRegistry samlServiceRegistry; @Mock private Saml2ParseService parseService; @@ -81,8 +81,8 @@ class TokenCheckServiceITCase { when(parseService.parse(anyString())).thenReturn(response); var config = SamlTokenTestUtils.initConfig(BAYERN_ID); - when(samlSettingsRegistry.getSetting(IDP_ENTITY_ID_BAYERN_ID)).thenReturn( - config.getSetting(IDP_ENTITY_ID_BAYERN_ID)); + when(samlServiceRegistry.getService(IDP_ENTITY_ID_BAYERN_ID)).thenReturn( + config.getService(IDP_ENTITY_ID_BAYERN_ID)); token = TestUtils.loadTextFile("SamlResponseBayernId.xml"); } @@ -101,7 +101,7 @@ class TokenCheckServiceITCase { when(decryptionService.decryptAttributes(any(), any(SamlSetting.class))).thenReturn( attributes); - CheckTokenResult result = service.getCheckTokenResult(token); + TokenValidationResult result = service.getCheckTokenResult(token); assertThat(result.getPostfachId()).isEqualTo(POSTFACH_ID_BAYERN_ID); } @@ -112,7 +112,7 @@ class TokenCheckServiceITCase { when(decryptionService.decryptAttributes(any(), any(SamlSetting.class))).thenReturn( attributes); - CheckTokenResult result = service.getCheckTokenResult(token); + TokenValidationResult result = service.getCheckTokenResult(token); assertThat(result.getTrustLevel()).isEqualTo(TRUST_LEVEL); } @@ -126,8 +126,8 @@ class TokenCheckServiceITCase { when(parseService.parse(anyString())).thenReturn(response); var config = SamlTokenTestUtils.initConfig(MUK); - when(samlSettingsRegistry.getSetting(IDP_ENTITY_ID_MUK)) - .thenReturn(config.getSetting(IDP_ENTITY_ID_MUK)); + when(samlServiceRegistry.getService(IDP_ENTITY_ID_MUK)) + .thenReturn(config.getService(IDP_ENTITY_ID_MUK)); token = TestUtils.loadTextFile("SamlResponseMuk.xml"); } @@ -143,7 +143,7 @@ class TokenCheckServiceITCase { @Test void shouldGetPostfachHandleFromMukToken() { - CheckTokenResult result = service.getCheckTokenResult(token); + TokenValidationResult result = service.getCheckTokenResult(token); assertThat(result.getPostfachId()).isEqualTo(POSTFACH_ID_MUK); } diff --git a/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckServiceTest.java b/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckServiceTest.java index 6af7a864faee57f99daf6d87e1af09a5d8e48a17..934e77cc674f0b8517b8ad8e7d434e9bca989024 100644 --- a/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckServiceTest.java +++ b/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckServiceTest.java @@ -49,7 +49,7 @@ import de.ozgcloud.token.saml.Saml2DecryptionService; import de.ozgcloud.token.saml.Saml2ParseService; import de.ozgcloud.token.saml.Saml2VerificationService; import de.ozgcloud.token.saml.SamlSetting; -import de.ozgcloud.token.saml.SamlSettingsRegistry; +import de.ozgcloud.token.saml.SamlServiceRegistry; class TokenCheckServiceTest { @@ -64,7 +64,7 @@ class TokenCheckServiceTest { private Saml2DecryptionService decryptionService; @Mock - private SamlSettingsRegistry samlSettingsRegistry; + private SamlServiceRegistry samlServiceRegistry; @Mock private Saml2ParseService parseService; @@ -121,13 +121,13 @@ class TokenCheckServiceTest { } } - private CheckTokenResult checkToken() { + private TokenValidationResult checkToken() { return service.checkToken(token); } } @Nested - class TestGetCheckTokenResult { + class TestGetTokenValidationResult { @Mock private SamlSetting samlSetting; @@ -137,15 +137,15 @@ class TokenCheckServiceTest { private Issuer issuer; private final String token = TestUtils.loadTextFile("SamlResponseBayernId.xml"); - private final CheckTokenResult checkTokenResult = CheckTokenResultTestFactory.create(); + private final TokenValidationResult tokenValidationResult = CheckTokenResultTestFactory.create(); @BeforeEach void mock() { when(parseService.parse(any())).thenReturn(response); when(response.getIssuer()).thenReturn(issuer); when(issuer.getValue()).thenReturn(IDP_ENTITY_ID_BAYERN_ID); - when(samlSettingsRegistry.getSetting(any())).thenReturn(samlSetting); - doReturn(checkTokenResult).when(service).buildCheckTokenResult(any(), any()); + when(samlServiceRegistry.getService(any())).thenReturn(samlSetting); + doReturn(tokenValidationResult).when(service).buildCheckTokenResult(any(), any()); } @Test @@ -159,7 +159,7 @@ class TokenCheckServiceTest { void shouldGetConfiguration() { getCheckTokenResult(); - verify(samlSettingsRegistry).getSetting(IDP_ENTITY_ID_BAYERN_ID); + verify(samlServiceRegistry).getService(IDP_ENTITY_ID_BAYERN_ID); } @Test @@ -173,16 +173,16 @@ class TokenCheckServiceTest { void shouldReturnCheckTokenResult() { var result = getCheckTokenResult(); - assertThat(result).isEqualTo(checkTokenResult); + assertThat(result).isEqualTo(tokenValidationResult); } - private CheckTokenResult getCheckTokenResult() { + private TokenValidationResult getCheckTokenResult() { return service.getCheckTokenResult(token); } } @Nested - class TestBuildCheckTokenResult { + class TestBuildTokenValidationResult { @Mock private SamlSetting samlSetting; @@ -227,7 +227,7 @@ class TokenCheckServiceTest { assertThat(result).isEqualTo(CheckTokenResultTestFactory.create()); } - private CheckTokenResult buildCheckTokenResult() { + private TokenValidationResult buildCheckTokenResult() { return service.buildCheckTokenResult(samlSetting, response); } } 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 index 297039197a6f08d1f6fd44b0433b64ff75d904ad..306dc8250e85091383e5ea59f6c2fac70093034e 100644 --- a/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckTestConfiguration.java +++ b/token-checker-server/src/test/java/de/ozgcloud/token/TokenCheckTestConfiguration.java @@ -26,14 +26,14 @@ 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.SamlSettingsRegistry; +import de.ozgcloud.token.saml.SamlServiceRegistry; import de.ozgcloud.token.saml.SamlTokenUtils; 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(TokenCheckProperties.class) +@EnableConfigurationProperties(TokenValidationProperties.class) public class TokenCheckTestConfiguration { @Bean ParserPool parserPool() throws ComponentInitializationException { @@ -48,8 +48,8 @@ public class TokenCheckTestConfiguration { } @Bean - SamlSettingsRegistry samlSettingsRegistry() { - return new SamlSettingsRegistry(); + SamlServiceRegistry samlSettingsRegistry() { + return new SamlServiceRegistry(); } } diff --git a/token-checker-server/src/test/java/de/ozgcloud/token/saml/Saml2DecryptionServiceTest.java b/token-checker-server/src/test/java/de/ozgcloud/token/saml/Saml2DecryptionServiceTest.java index 2878ef07d30b3e5ae5a22c2baf7b36c0241ce4bd..06d651418e4fc3de66e0bde651149a80167f3807 100644 --- a/token-checker-server/src/test/java/de/ozgcloud/token/saml/Saml2DecryptionServiceTest.java +++ b/token-checker-server/src/test/java/de/ozgcloud/token/saml/Saml2DecryptionServiceTest.java @@ -69,7 +69,7 @@ class Saml2DecryptionServiceTest { var parserPool = SamlTokenTestUtils.initParserPool(); var samlSettingsRegistry = SamlTokenTestUtils.initConfig(BAYERN_ID); - samlSetting = samlSettingsRegistry.getSetting(IDP_ENTITY_ID_BAYERN_ID); + samlSetting = samlSettingsRegistry.getService(IDP_ENTITY_ID_BAYERN_ID); var responseUnmarshaller = (ResponseUnmarshaller) XMLObjectProviderRegistrySupport.getUnmarshallerFactory() .getUnmarshaller(Response.DEFAULT_ELEMENT_NAME); parseService = new Saml2ParseService(parserPool, responseUnmarshaller); diff --git a/token-checker-server/src/test/java/de/ozgcloud/token/saml/Saml2VerificationServiceTest.java b/token-checker-server/src/test/java/de/ozgcloud/token/saml/Saml2VerificationServiceTest.java index 45f600b6501d49fc5a1cc7ced147ffcfb3e658f8..f9d3a4eb338b302686958f615922cbb190db97e9 100644 --- a/token-checker-server/src/test/java/de/ozgcloud/token/saml/Saml2VerificationServiceTest.java +++ b/token-checker-server/src/test/java/de/ozgcloud/token/saml/Saml2VerificationServiceTest.java @@ -60,7 +60,7 @@ class Saml2VerificationServiceTest { @Mock private Saml2ParseService parser; @Mock - private SamlSettingsRegistry samlSettingsRegistry; + private SamlServiceRegistry samlServiceRegistry; @Mock private SAMLSignatureProfileValidator profileValidator; @@ -284,7 +284,7 @@ class Saml2VerificationServiceTest { when(response.getIssuer()).thenReturn(issuer); when(issuer.getValue()).thenReturn(issuerValue); errors = new ArrayList<>(); - when(samlSettingsRegistry.getSetting(any())).thenReturn(samlSetting); + when(samlServiceRegistry.getService(any())).thenReturn(samlSetting); when(samlSetting.getTrustEngine()).thenReturn(trustEngine); when(samlSetting.getCriteriaSet()).thenReturn(criteriaSet); } @@ -293,7 +293,7 @@ class Saml2VerificationServiceTest { void shouldGetSamlSetting() { validateSignature(); - verify(samlSettingsRegistry).getSetting(issuerValue); + verify(samlServiceRegistry).getService(issuerValue); } @Test diff --git a/token-checker-server/src/test/java/de/ozgcloud/token/saml/SamlSettingsRegistryTest.java b/token-checker-server/src/test/java/de/ozgcloud/token/saml/SamlSettingsRegistryTest.java deleted file mode 100644 index 6aa85ea1d0c0aa0b21cfbc0a22605a12f68b032d..0000000000000000000000000000000000000000 --- a/token-checker-server/src/test/java/de/ozgcloud/token/saml/SamlSettingsRegistryTest.java +++ /dev/null @@ -1,50 +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 org.assertj.core.api.Assertions.*; -import static org.mockito.Mockito.*; - -import java.util.Map; - -import org.junit.jupiter.api.Test; -import org.opensaml.saml.saml2.encryption.Decrypter; -import org.opensaml.xmlsec.signature.support.SignatureTrustEngine; - -import net.shibboleth.utilities.java.support.resolver.CriteriaSet; - -class SamlSettingsRegistryTest { - public static final String TEST_IDP = "test.idp"; - SamlSettingsRegistry registry = new SamlSettingsRegistry(); - - @Test - void shouldAddSetting() { - registry.addSetting(TEST_IDP, new SamlSetting( - mock(SignatureTrustEngine.class), mock(CriteriaSet.class), mock(Decrypter.class), Map.of(), false)); - - assertThat(registry.getSetting(TEST_IDP)).isNotNull(); - } - - @Test - void shouldThrowExceptionWhenEmptySignatureTrustEngine() { - assertThatException().isThrownBy(() -> registry.getSetting(TEST_IDP)); - } -} \ 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 index ebd79cb880c6a5eefca0e47a3735e973e86068a4..78fdfc3edfe1d1fcffb3b0578a36804956ba329e 100644 --- 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 @@ -31,8 +31,8 @@ import org.jetbrains.annotations.NotNull; import org.springframework.core.io.InputStreamResource; import de.ozgcloud.common.test.TestUtils; -import de.ozgcloud.token.TokenCheckConfiguration; -import de.ozgcloud.token.TokenCheckProperties; +import de.ozgcloud.token.TokenCheckerConfiguration; +import de.ozgcloud.token.TokenValidationProperties; import lombok.AccessLevel; import lombok.NoArgsConstructor; import net.shibboleth.utilities.java.support.component.ComponentInitializationException; @@ -57,23 +57,23 @@ public class SamlTokenTestUtils { return localParserPool; } - public static SamlSettingsRegistry initConfig(String type) throws ComponentInitializationException { - TokenCheckProperties properties = null; + 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 SamlSettingsRegistry(); - var config = new TokenCheckConfiguration(properties, initParserPool(), samlSettingsRegistry); + var samlSettingsRegistry = new SamlServiceRegistry(); + var config = new TokenCheckerConfiguration(properties, initParserPool(), samlSettingsRegistry); config.initOpenSAML(); return samlSettingsRegistry; } - static @NotNull TokenCheckProperties initProperties() { - TokenCheckProperties properties = mock(TokenCheckProperties.class); + 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"))); @@ -84,8 +84,8 @@ public class SamlTokenTestUtils { return properties; } - static @NotNull TokenCheckProperties initMukProperties() { - TokenCheckProperties properties = mock(TokenCheckProperties.class); + 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"))); diff --git a/token-checker-server/src/test/java/de/ozgcloud/token/saml/SamlTokenUtilsTest.java b/token-checker-server/src/test/java/de/ozgcloud/token/saml/SamlTokenUtilsTest.java index f97c3d489c478ac5d10c0f6550527d45ff1fa0c9..87e7b6758f4abe5f3ed48579b4a4248d9b9cd6eb 100644 --- a/token-checker-server/src/test/java/de/ozgcloud/token/saml/SamlTokenUtilsTest.java +++ b/token-checker-server/src/test/java/de/ozgcloud/token/saml/SamlTokenUtilsTest.java @@ -49,7 +49,7 @@ import org.springframework.core.io.Resource; import org.springframework.security.saml2.Saml2Exception; import de.ozgcloud.common.test.TestUtils; -import de.ozgcloud.token.TokenCheckProperties; +import de.ozgcloud.token.TokenValidationProperties; import net.shibboleth.utilities.java.support.component.ComponentInitializationException; import net.shibboleth.utilities.java.support.xml.BasicParserPool; import net.shibboleth.utilities.java.support.xml.ParserPool; @@ -154,7 +154,7 @@ class SamlTokenUtilsTest { @BeforeEach void setUp() { - TokenCheckProperties tokenCheckerProperties = SamlTokenTestUtils.initProperties(); + TokenValidationProperties tokenCheckerProperties = SamlTokenTestUtils.initProperties(); key = tokenCheckerProperties.getEntities().getFirst().getKey(); certificate = tokenCheckerProperties.getEntities().getFirst().getCertificate(); }