Skip to content
Snippets Groups Projects
Commit 2893f4b9 authored by OZGCloud's avatar OZGCloud
Browse files

OZG-7092 [wip] do refactoring

parent 12c0b474
No related branches found
No related tags found
1 merge request!1OZG-7092 Anpassung TokenChecker
Showing
with 91 additions and 184 deletions
...@@ -2,24 +2,9 @@ package de.ozgcloud.token; ...@@ -2,24 +2,9 @@ package de.ozgcloud.token;
import org.mapstruct.CollectionMappingStrategy; import org.mapstruct.CollectionMappingStrategy;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.ReportingPolicy; import org.mapstruct.ReportingPolicy;
import de.ozgcloud.token.common.errorhandling.TokenVerificationException;
@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN, collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED) @Mapper(unmappedTargetPolicy = ReportingPolicy.WARN, collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED)
public interface CheckErrorMapper { 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);
} }
/*
* 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;
}
...@@ -28,18 +28,28 @@ import org.mapstruct.ReportingPolicy; ...@@ -28,18 +28,28 @@ import org.mapstruct.ReportingPolicy;
@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN, collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED) @Mapper(unmappedTargetPolicy = ReportingPolicy.WARN, collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED)
interface CheckTokenResultMapper { 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 = "unknownFields", ignore = true)
@Mapping(target = "allFields", ignore = true) @Mapping(target = "trustLevelBytes", ignore = true)
@Mapping(target = "removeOtherFields", ignore = true) @Mapping(target = "removeOtherFields", ignore = true)
@Mapping(target = "postfachIdBytes", ignore = true) @Mapping(target = "postfachIdBytes", ignore = true)
@Mapping(target = "trustLevelBytes", ignore = true)
@Mapping(target = "otherFieldsOrBuilderList", ignore = true) @Mapping(target = "otherFieldsOrBuilderList", ignore = true)
@Mapping(target = "otherFieldsList", ignore = true)
@Mapping(target = "otherFieldsBuilderList", ignore = true) @Mapping(target = "otherFieldsBuilderList", ignore = true)
@Mapping(target = "otherFieldsList", source = "attributes") @Mapping(target = "mergeUnknownFields", ignore = true)
GrpcCheckTokenResult toCheckTokenResult(CheckTokenResult result); @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);
} }
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
package de.ozgcloud.token; package de.ozgcloud.token;
import de.ozgcloud.token.common.errorhandling.TokenVerificationException; import de.ozgcloud.token.saml.SamlTokenService;
import io.grpc.stub.StreamObserver; import io.grpc.stub.StreamObserver;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
...@@ -30,32 +30,31 @@ import net.devh.boot.grpc.server.service.GrpcService; ...@@ -30,32 +30,31 @@ import net.devh.boot.grpc.server.service.GrpcService;
@GrpcService @GrpcService
@RequiredArgsConstructor @RequiredArgsConstructor
public class TokenCheckGrpcService extends TokenCheckServiceGrpc.TokenCheckServiceImplBase { public class TokenCheckGrpcService extends TokenCheckServiceGrpc.TokenCheckServiceImplBase {
private final TokenCheckService tokenCheckerService;
private final SamlTokenService samlTokenService;
private final CheckTokenResultMapper tokenCheckMapper; private final CheckTokenResultMapper tokenCheckMapper;
private final CheckErrorMapper checkErrorMapper;
@Override @Override
public void checkToken(GrpcCheckTokenRequest request, StreamObserver<GrpcCheckTokenResponse> responseStreamObserver) { public void checkToken(GrpcCheckTokenRequest request, StreamObserver<GrpcCheckTokenResponse> responseStreamObserver) {
try { var result = samlTokenService.validate(request.getToken());
var result = tokenCheckerService.checkToken(request.getToken()); responseStreamObserver.onNext(buildResponse(result));
responseStreamObserver.onNext(buildValidCheckTokenResponse(result));
} catch (TokenVerificationException e) {
responseStreamObserver.onNext(buildInvalidCheckTokenResponse(e));
} finally {
responseStreamObserver.onCompleted(); responseStreamObserver.onCompleted();
} }
GrpcCheckTokenResponse buildResponse(TokenValidationResult result) {
return result.isValid() ? buildValidCheckTokenResponse(result) : buildInvalidCheckTokenResponse(result);
} }
GrpcCheckTokenResponse buildValidCheckTokenResponse(CheckTokenResult result) { GrpcCheckTokenResponse buildValidCheckTokenResponse(TokenValidationResult result) {
return GrpcCheckTokenResponse.newBuilder() return GrpcCheckTokenResponse.newBuilder()
.setTokenValid(true) .setTokenValid(true)
.setTokenCheckResult(tokenCheckMapper.toCheckTokenResult(result)).build(); .setTokenAttributes(tokenCheckMapper.toTokenAttributes(result)).build();
} }
GrpcCheckTokenResponse buildInvalidCheckTokenResponse(TokenVerificationException exception) { GrpcCheckTokenResponse buildInvalidCheckTokenResponse(TokenValidationResult result) {
return GrpcCheckTokenResponse.newBuilder() return GrpcCheckTokenResponse.newBuilder()
.setTokenValid(false) .setTokenValid(false)
.setCheckError(checkErrorMapper.fromTokenVerificationException(exception)) .setCheckError(tokenCheckMapper.toCheckError(result))
.build(); .build();
} }
} }
/*
* 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;
}
...@@ -31,21 +31,22 @@ import de.ozgcloud.token.saml.Saml2DecryptionService; ...@@ -31,21 +31,22 @@ import de.ozgcloud.token.saml.Saml2DecryptionService;
import de.ozgcloud.token.saml.Saml2ParseService; import de.ozgcloud.token.saml.Saml2ParseService;
import de.ozgcloud.token.saml.Saml2VerificationService; import de.ozgcloud.token.saml.Saml2VerificationService;
import de.ozgcloud.token.saml.SamlSetting; import de.ozgcloud.token.saml.SamlSetting;
import de.ozgcloud.token.saml.SamlSettingsRegistry; import de.ozgcloud.token.saml.SamlServiceRegistry;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class TokenCheckService { public class TokenCheckService {
public static final String POSTFACH_ID_KEY = "postfachId"; public static final String POSTFACH_ID_KEY = "postfachId";
public static final String TRUST_LEVEL_KEY = "trustLevel"; public static final String TRUST_LEVEL_KEY = "trustLevel";
private final SamlSettingsRegistry samlSettingsRegistry; private final SamlServiceRegistry samlServiceRegistry;
private final Saml2DecryptionService decryptionService; private final Saml2DecryptionService decryptionService;
private final Saml2ParseService parseService; private final Saml2ParseService parseService;
private final Saml2VerificationService verificationService; private final Saml2VerificationService verificationService;
public CheckTokenResult checkToken(final String token) { public TokenValidationResult checkToken(final String token) {
var errors = verificationService.verify(token); var errors = verificationService.verify(token);
if (errors.isEmpty()) { if (errors.isEmpty()) {
return getCheckTokenResult(token); return getCheckTokenResult(token);
...@@ -53,15 +54,15 @@ public class TokenCheckService { ...@@ -53,15 +54,15 @@ public class TokenCheckService {
throw new TokenVerificationException("Errors occurred while checking token", errors); 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 response = parseService.parse(token);
var samlSetting = samlSettingsRegistry.getSetting(response.getIssuer().getValue()); var samlSetting = samlServiceRegistry.getService(response.getIssuer().getValue());
return buildCheckTokenResult(samlSetting, response); return buildCheckTokenResult(samlSetting, response);
} }
CheckTokenResult buildCheckTokenResult(SamlSetting samlSetting, Response response) { TokenValidationResult buildCheckTokenResult(SamlSetting samlSetting, Response response) {
var decryptedAttributes = decryptionService.decryptAttributes(response, samlSetting); var decryptedAttributes = decryptionService.decryptAttributes(response, samlSetting);
return CheckTokenResult.builder() return TokenValidationResult.builder()
.attributes(decryptedAttributes) .attributes(decryptedAttributes)
.postfachId(getPostfachId(samlSetting, response, decryptedAttributes)) .postfachId(getPostfachId(samlSetting, response, decryptedAttributes))
.trustLevel(findAttributeByKey(TRUST_LEVEL_KEY, decryptedAttributes, samlSetting)) .trustLevel(findAttributeByKey(TRUST_LEVEL_KEY, decryptedAttributes, samlSetting))
......
...@@ -47,7 +47,7 @@ public class Saml2VerificationService { ...@@ -47,7 +47,7 @@ public class Saml2VerificationService {
static final String FORMAT = " [%s]: "; static final String FORMAT = " [%s]: ";
private final Saml2ParseService parser; private final Saml2ParseService parser;
private final SamlSettingsRegistry samlSettingsRegistry; private final SamlServiceRegistry samlServiceRegistry;
private final SAMLSignatureProfileValidator profileValidator; private final SAMLSignatureProfileValidator profileValidator;
...@@ -78,7 +78,7 @@ public class Saml2VerificationService { ...@@ -78,7 +78,7 @@ public class Saml2VerificationService {
} }
void validateSignature(Response response, List<Saml2Error> errors) { void validateSignature(Response response, List<Saml2Error> errors) {
var samlSetting = samlSettingsRegistry.getSetting(response.getIssuer().getValue()); var samlSetting = samlServiceRegistry.getService(response.getIssuer().getValue());
try { try {
if (!samlSetting.getTrustEngine().validate(Objects.requireNonNull(response.getSignature()), samlSetting.getCriteriaSet())) { if (!samlSetting.getTrustEngine().validate(Objects.requireNonNull(response.getSignature()), samlSetting.getCriteriaSet())) {
errors.add(new Saml2Error(Saml2ErrorCodes.INVALID_SIGNATURE, INVALID_SIGNATURE + FORMAT.formatted(response.getID()))); errors.add(new Saml2Error(Saml2ErrorCodes.INVALID_SIGNATURE, INVALID_SIGNATURE + FORMAT.formatted(response.getID())));
......
...@@ -47,8 +47,8 @@ public class SamlConfiguration { ...@@ -47,8 +47,8 @@ public class SamlConfiguration {
return registryBuilder.build(); return registryBuilder.build();
} }
SamlTokenService samlTokenService(TokenValidationProperties.TokenValidationProperty tokenValidationProperty) { SamlTokenValidationService samlTokenService(TokenValidationProperties.TokenValidationProperty tokenValidationProperty) {
return SamlTokenService.builder() return SamlTokenValidationService.builder()
.signatureTrustEngine(samlTrustEngineFactory.buildSamlTrustEngine(tokenValidationProperty)) .signatureTrustEngine(samlTrustEngineFactory.buildSamlTrustEngine(tokenValidationProperty))
.decrypter(samlDecrypterFactory.buildDecrypter(tokenValidationProperty)) .decrypter(samlDecrypterFactory.buildDecrypter(tokenValidationProperty))
.verificationCriteria(buildVerificationCriteria(tokenValidationProperty.getIdpEntityId())) .verificationCriteria(buildVerificationCriteria(tokenValidationProperty.getIdpEntityId()))
......
...@@ -30,9 +30,9 @@ import lombok.Singular; ...@@ -30,9 +30,9 @@ import lombok.Singular;
public class SamlServiceRegistry { public class SamlServiceRegistry {
@Singular @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)); return Optional.ofNullable(samlServices.get(idpEntityId));
} }
} }
...@@ -50,11 +50,6 @@ import lombok.NoArgsConstructor; ...@@ -50,11 +50,6 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor(access = AccessLevel.PRIVATE) @NoArgsConstructor(access = AccessLevel.PRIVATE)
public class SamlTokenUtils { 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_CERTIFICATE_LOCATION_SPECIFIED = "No certificate location specified";
public static final String NO_PRIVATE_KEY_LOCATION_SPECIFIED = "No private key location specified"; public static final String NO_PRIVATE_KEY_LOCATION_SPECIFIED = "No private key location specified";
......
...@@ -20,7 +20,7 @@ class CheckErrorMapperTest { ...@@ -20,7 +20,7 @@ class CheckErrorMapperTest {
var exception = TokenVerificationExceptionTestFactory.create(); var exception = TokenVerificationExceptionTestFactory.create();
var expectedCheckError = GrpcCheckErrorTestFactory.createBuilder().setMessage(exception.getMessage()).build(); var expectedCheckError = GrpcCheckErrorTestFactory.createBuilder().setMessage(exception.getMessage()).build();
var checkError = mapper.fromTokenVerificationException(exception); var checkError = mapper.toCheckError(exception);
assertThat(checkError).isEqualTo(expectedCheckError); assertThat(checkError).isEqualTo(expectedCheckError);
} }
......
...@@ -33,12 +33,12 @@ public class CheckTokenResultTestFactory { ...@@ -33,12 +33,12 @@ public class CheckTokenResultTestFactory {
public static final String TRUST_LEVEL = "LOW"; public static final String TRUST_LEVEL = "LOW";
public static final TokenAttribute OTHER_FIELD = TokenAttributeTestFactory.create(); public static final TokenAttribute OTHER_FIELD = TokenAttributeTestFactory.create();
static CheckTokenResult create() { static TokenValidationResult create() {
return createBuilder().build(); return createBuilder().build();
} }
static CheckTokenResult.CheckTokenResultBuilder createBuilder() { static TokenValidationResult.CheckTokenResultBuilder createBuilder() {
return new CheckTokenResult.CheckTokenResultBuilder() return new TokenValidationResult.CheckTokenResultBuilder()
.postfachId(POSTFACH_ID) .postfachId(POSTFACH_ID)
.trustLevel(TRUST_LEVEL) .trustLevel(TRUST_LEVEL)
.attributes(List.of(OTHER_FIELD)); .attributes(List.of(OTHER_FIELD));
......
...@@ -26,7 +26,7 @@ import lombok.NoArgsConstructor; ...@@ -26,7 +26,7 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor(access = AccessLevel.PRIVATE) @NoArgsConstructor(access = AccessLevel.PRIVATE)
class GrpcCheckTokenResponseTestFactory { class GrpcCheckTokenResponseTestFactory {
public static final GrpcCheckTokenResult CHECK_TOKEN_RESULT = GrpcTokenCheckResultTestFactory.create(); public static final GrpcCheckTokenResponse CHECK_TOKEN_RESULT = GrpcTokenCheckResultTestFactory.create();
public static GrpcCheckTokenResponse createValid() { public static GrpcCheckTokenResponse createValid() {
return createValidBuilder().build(); return createValidBuilder().build();
......
...@@ -20,8 +20,6 @@ ...@@ -20,8 +20,6 @@
package de.ozgcloud.token; package de.ozgcloud.token;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import net.shibboleth.utilities.java.support.component.ComponentInitializationException; import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
...@@ -32,8 +30,8 @@ class TokenCheckApplicationTest { ...@@ -32,8 +30,8 @@ class TokenCheckApplicationTest {
void shouldCreateParserPool() throws ComponentInitializationException { void shouldCreateParserPool() throws ComponentInitializationException {
TokenCheckApplication application = new TokenCheckApplication(); TokenCheckApplication application = new TokenCheckApplication();
var parserPool = application.parserPool(); // var parserPool = application.parserPool();
assertThat(parserPool).isNotNull(); // assertThat(parserPool).isNotNull();
} }
} }
\ No newline at end of file
...@@ -33,6 +33,7 @@ import org.mockito.Spy; ...@@ -33,6 +33,7 @@ import org.mockito.Spy;
import de.ozgcloud.token.common.errorhandling.TokenVerificationException; import de.ozgcloud.token.common.errorhandling.TokenVerificationException;
import de.ozgcloud.token.common.errorhandling.TokenVerificationExceptionTestFactory; import de.ozgcloud.token.common.errorhandling.TokenVerificationExceptionTestFactory;
import de.ozgcloud.token.saml.SamlTokenService;
import io.grpc.stub.StreamObserver; import io.grpc.stub.StreamObserver;
class TokenCheckGrpcServiceTest { class TokenCheckGrpcServiceTest {
...@@ -41,21 +42,18 @@ class TokenCheckGrpcServiceTest { ...@@ -41,21 +42,18 @@ class TokenCheckGrpcServiceTest {
private TokenCheckGrpcService service; private TokenCheckGrpcService service;
@Mock @Mock
private TokenCheckService tokenCheckerService; private SamlTokenService samlTokenService;
@Mock @Mock
private CheckTokenResultMapper tokenCheckMapper; private CheckTokenResultMapper tokenCheckMapper;
@Mock
private CheckErrorMapper checkErrorMapper;
@Mock @Mock
private StreamObserver<GrpcCheckTokenResponse> tokenStreamObserver; private StreamObserver<GrpcCheckTokenResponse> tokenStreamObserver;
@Nested @Nested
class TestCheckToken { class TestCheckToken {
private final CheckTokenResult tokenCheckResult = CheckTokenResultTestFactory.create(); private final TokenValidationResult tokenCheckResult = CheckTokenResultTestFactory.create();
@Test @Test
void shouldCallTokenCheckerService() { void shouldCallTokenCheckerService() {
...@@ -63,7 +61,7 @@ class TokenCheckGrpcServiceTest { ...@@ -63,7 +61,7 @@ class TokenCheckGrpcServiceTest {
checkToken(); checkToken();
verify(tokenCheckerService).checkToken(GrpcCheckTokenRequestTestFactory.TOKEN); verify(samlTokenService).checkToken(GrpcCheckTokenRequestTestFactory.TOKEN);
} }
@Nested @Nested
...@@ -72,7 +70,7 @@ class TokenCheckGrpcServiceTest { ...@@ -72,7 +70,7 @@ class TokenCheckGrpcServiceTest {
@BeforeEach @BeforeEach
void givenValidToken() { void givenValidToken() {
when(tokenCheckerService.checkToken(any())).thenReturn(tokenCheckResult); when(samlTokenService.checkToken(any())).thenReturn(tokenCheckResult);
doReturn(validResponse).when(service).buildValidCheckTokenResponse(any()); doReturn(validResponse).when(service).buildValidCheckTokenResponse(any());
} }
...@@ -105,7 +103,7 @@ class TokenCheckGrpcServiceTest { ...@@ -105,7 +103,7 @@ class TokenCheckGrpcServiceTest {
@BeforeEach @BeforeEach
void givenValidToken() { void givenValidToken() {
doThrow(exception).when(tokenCheckerService).checkToken(any()); doThrow(exception).when(samlTokenService).checkToken(any());
doReturn(invalidResponse).when(service).buildInvalidCheckTokenResponse(exception); doReturn(invalidResponse).when(service).buildInvalidCheckTokenResponse(exception);
} }
...@@ -139,18 +137,18 @@ class TokenCheckGrpcServiceTest { ...@@ -139,18 +137,18 @@ class TokenCheckGrpcServiceTest {
@Nested @Nested
class TestBuildValidCheckTokenResponse { class TestBuildValidCheckTokenResponse {
private CheckTokenResult tokenCheckResult = CheckTokenResultTestFactory.create(); private TokenValidationResult tokenCheckResult = CheckTokenResultTestFactory.create();
@BeforeEach @BeforeEach
void mock() { void mock() {
when(tokenCheckMapper.toCheckTokenResult(any())).thenReturn(GrpcCheckTokenResponseTestFactory.CHECK_TOKEN_RESULT); when(tokenCheckMapper.toTokenAttributes(any())).thenReturn(GrpcCheckTokenResponseTestFactory.CHECK_TOKEN_RESULT);
} }
@Test @Test
void shouldCallMapper() { void shouldCallMapper() {
buildCheckTokenResponse(); buildCheckTokenResponse();
verify(tokenCheckMapper).toCheckTokenResult(tokenCheckResult); verify(tokenCheckMapper).toTokenAttributes(tokenCheckResult);
} }
@Test @Test
...@@ -172,14 +170,14 @@ class TokenCheckGrpcServiceTest { ...@@ -172,14 +170,14 @@ class TokenCheckGrpcServiceTest {
@BeforeEach @BeforeEach
void mock() { void mock() {
when(checkErrorMapper.fromTokenVerificationException(any())).thenReturn(GrpcCheckErrorTestFactory.create()); when(checkErrorMapper.toCheckError(any())).thenReturn(GrpcCheckErrorTestFactory.create());
} }
@Test @Test
void shouldCallMapper() { void shouldCallMapper() {
buildCheckTokenResponse(); buildCheckTokenResponse();
verify(checkErrorMapper).fromTokenVerificationException(exception); verify(checkErrorMapper).toCheckError(exception);
} }
@Test @Test
......
...@@ -54,7 +54,7 @@ class TokenCheckMapperTest { ...@@ -54,7 +54,7 @@ class TokenCheckMapperTest {
} }
private GrpcCheckTokenResult toTokenCheckResult() { private GrpcCheckTokenResult toTokenCheckResult() {
return mapper.toCheckTokenResult(CheckTokenResultTestFactory.create()); return mapper.toTokenAttributes(CheckTokenResultTestFactory.create());
} }
} }
} }
\ No newline at end of file
...@@ -42,7 +42,7 @@ import de.ozgcloud.token.saml.Saml2DecryptionService; ...@@ -42,7 +42,7 @@ import de.ozgcloud.token.saml.Saml2DecryptionService;
import de.ozgcloud.token.saml.Saml2ParseService; import de.ozgcloud.token.saml.Saml2ParseService;
import de.ozgcloud.token.saml.Saml2VerificationService; import de.ozgcloud.token.saml.Saml2VerificationService;
import de.ozgcloud.token.saml.SamlSetting; 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 de.ozgcloud.token.saml.SamlTokenTestUtils;
import net.shibboleth.utilities.java.support.component.ComponentInitializationException; import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
...@@ -64,7 +64,7 @@ class TokenCheckServiceITCase { ...@@ -64,7 +64,7 @@ class TokenCheckServiceITCase {
private Saml2DecryptionService decryptionService; private Saml2DecryptionService decryptionService;
@Mock @Mock
private SamlSettingsRegistry samlSettingsRegistry; private SamlServiceRegistry samlServiceRegistry;
@Mock @Mock
private Saml2ParseService parseService; private Saml2ParseService parseService;
...@@ -81,8 +81,8 @@ class TokenCheckServiceITCase { ...@@ -81,8 +81,8 @@ class TokenCheckServiceITCase {
when(parseService.parse(anyString())).thenReturn(response); when(parseService.parse(anyString())).thenReturn(response);
var config = SamlTokenTestUtils.initConfig(BAYERN_ID); var config = SamlTokenTestUtils.initConfig(BAYERN_ID);
when(samlSettingsRegistry.getSetting(IDP_ENTITY_ID_BAYERN_ID)).thenReturn( when(samlServiceRegistry.getService(IDP_ENTITY_ID_BAYERN_ID)).thenReturn(
config.getSetting(IDP_ENTITY_ID_BAYERN_ID)); config.getService(IDP_ENTITY_ID_BAYERN_ID));
token = TestUtils.loadTextFile("SamlResponseBayernId.xml"); token = TestUtils.loadTextFile("SamlResponseBayernId.xml");
} }
...@@ -101,7 +101,7 @@ class TokenCheckServiceITCase { ...@@ -101,7 +101,7 @@ class TokenCheckServiceITCase {
when(decryptionService.decryptAttributes(any(), any(SamlSetting.class))).thenReturn( when(decryptionService.decryptAttributes(any(), any(SamlSetting.class))).thenReturn(
attributes); attributes);
CheckTokenResult result = service.getCheckTokenResult(token); TokenValidationResult result = service.getCheckTokenResult(token);
assertThat(result.getPostfachId()).isEqualTo(POSTFACH_ID_BAYERN_ID); assertThat(result.getPostfachId()).isEqualTo(POSTFACH_ID_BAYERN_ID);
} }
...@@ -112,7 +112,7 @@ class TokenCheckServiceITCase { ...@@ -112,7 +112,7 @@ class TokenCheckServiceITCase {
when(decryptionService.decryptAttributes(any(), any(SamlSetting.class))).thenReturn( when(decryptionService.decryptAttributes(any(), any(SamlSetting.class))).thenReturn(
attributes); attributes);
CheckTokenResult result = service.getCheckTokenResult(token); TokenValidationResult result = service.getCheckTokenResult(token);
assertThat(result.getTrustLevel()).isEqualTo(TRUST_LEVEL); assertThat(result.getTrustLevel()).isEqualTo(TRUST_LEVEL);
} }
...@@ -126,8 +126,8 @@ class TokenCheckServiceITCase { ...@@ -126,8 +126,8 @@ class TokenCheckServiceITCase {
when(parseService.parse(anyString())).thenReturn(response); when(parseService.parse(anyString())).thenReturn(response);
var config = SamlTokenTestUtils.initConfig(MUK); var config = SamlTokenTestUtils.initConfig(MUK);
when(samlSettingsRegistry.getSetting(IDP_ENTITY_ID_MUK)) when(samlServiceRegistry.getService(IDP_ENTITY_ID_MUK))
.thenReturn(config.getSetting(IDP_ENTITY_ID_MUK)); .thenReturn(config.getService(IDP_ENTITY_ID_MUK));
token = TestUtils.loadTextFile("SamlResponseMuk.xml"); token = TestUtils.loadTextFile("SamlResponseMuk.xml");
} }
...@@ -143,7 +143,7 @@ class TokenCheckServiceITCase { ...@@ -143,7 +143,7 @@ class TokenCheckServiceITCase {
@Test @Test
void shouldGetPostfachHandleFromMukToken() { void shouldGetPostfachHandleFromMukToken() {
CheckTokenResult result = service.getCheckTokenResult(token); TokenValidationResult result = service.getCheckTokenResult(token);
assertThat(result.getPostfachId()).isEqualTo(POSTFACH_ID_MUK); assertThat(result.getPostfachId()).isEqualTo(POSTFACH_ID_MUK);
} }
......
...@@ -49,7 +49,7 @@ import de.ozgcloud.token.saml.Saml2DecryptionService; ...@@ -49,7 +49,7 @@ import de.ozgcloud.token.saml.Saml2DecryptionService;
import de.ozgcloud.token.saml.Saml2ParseService; import de.ozgcloud.token.saml.Saml2ParseService;
import de.ozgcloud.token.saml.Saml2VerificationService; import de.ozgcloud.token.saml.Saml2VerificationService;
import de.ozgcloud.token.saml.SamlSetting; import de.ozgcloud.token.saml.SamlSetting;
import de.ozgcloud.token.saml.SamlSettingsRegistry; import de.ozgcloud.token.saml.SamlServiceRegistry;
class TokenCheckServiceTest { class TokenCheckServiceTest {
...@@ -64,7 +64,7 @@ class TokenCheckServiceTest { ...@@ -64,7 +64,7 @@ class TokenCheckServiceTest {
private Saml2DecryptionService decryptionService; private Saml2DecryptionService decryptionService;
@Mock @Mock
private SamlSettingsRegistry samlSettingsRegistry; private SamlServiceRegistry samlServiceRegistry;
@Mock @Mock
private Saml2ParseService parseService; private Saml2ParseService parseService;
...@@ -121,13 +121,13 @@ class TokenCheckServiceTest { ...@@ -121,13 +121,13 @@ class TokenCheckServiceTest {
} }
} }
private CheckTokenResult checkToken() { private TokenValidationResult checkToken() {
return service.checkToken(token); return service.checkToken(token);
} }
} }
@Nested @Nested
class TestGetCheckTokenResult { class TestGetTokenValidationResult {
@Mock @Mock
private SamlSetting samlSetting; private SamlSetting samlSetting;
...@@ -137,15 +137,15 @@ class TokenCheckServiceTest { ...@@ -137,15 +137,15 @@ class TokenCheckServiceTest {
private Issuer issuer; private Issuer issuer;
private final String token = TestUtils.loadTextFile("SamlResponseBayernId.xml"); private final String token = TestUtils.loadTextFile("SamlResponseBayernId.xml");
private final CheckTokenResult checkTokenResult = CheckTokenResultTestFactory.create(); private final TokenValidationResult tokenValidationResult = CheckTokenResultTestFactory.create();
@BeforeEach @BeforeEach
void mock() { void mock() {
when(parseService.parse(any())).thenReturn(response); when(parseService.parse(any())).thenReturn(response);
when(response.getIssuer()).thenReturn(issuer); when(response.getIssuer()).thenReturn(issuer);
when(issuer.getValue()).thenReturn(IDP_ENTITY_ID_BAYERN_ID); when(issuer.getValue()).thenReturn(IDP_ENTITY_ID_BAYERN_ID);
when(samlSettingsRegistry.getSetting(any())).thenReturn(samlSetting); when(samlServiceRegistry.getService(any())).thenReturn(samlSetting);
doReturn(checkTokenResult).when(service).buildCheckTokenResult(any(), any()); doReturn(tokenValidationResult).when(service).buildCheckTokenResult(any(), any());
} }
@Test @Test
...@@ -159,7 +159,7 @@ class TokenCheckServiceTest { ...@@ -159,7 +159,7 @@ class TokenCheckServiceTest {
void shouldGetConfiguration() { void shouldGetConfiguration() {
getCheckTokenResult(); getCheckTokenResult();
verify(samlSettingsRegistry).getSetting(IDP_ENTITY_ID_BAYERN_ID); verify(samlServiceRegistry).getService(IDP_ENTITY_ID_BAYERN_ID);
} }
@Test @Test
...@@ -173,16 +173,16 @@ class TokenCheckServiceTest { ...@@ -173,16 +173,16 @@ class TokenCheckServiceTest {
void shouldReturnCheckTokenResult() { void shouldReturnCheckTokenResult() {
var result = getCheckTokenResult(); var result = getCheckTokenResult();
assertThat(result).isEqualTo(checkTokenResult); assertThat(result).isEqualTo(tokenValidationResult);
} }
private CheckTokenResult getCheckTokenResult() { private TokenValidationResult getCheckTokenResult() {
return service.getCheckTokenResult(token); return service.getCheckTokenResult(token);
} }
} }
@Nested @Nested
class TestBuildCheckTokenResult { class TestBuildTokenValidationResult {
@Mock @Mock
private SamlSetting samlSetting; private SamlSetting samlSetting;
...@@ -227,7 +227,7 @@ class TokenCheckServiceTest { ...@@ -227,7 +227,7 @@ class TokenCheckServiceTest {
assertThat(result).isEqualTo(CheckTokenResultTestFactory.create()); assertThat(result).isEqualTo(CheckTokenResultTestFactory.create());
} }
private CheckTokenResult buildCheckTokenResult() { private TokenValidationResult buildCheckTokenResult() {
return service.buildCheckTokenResult(samlSetting, response); return service.buildCheckTokenResult(samlSetting, response);
} }
} }
......
...@@ -26,14 +26,14 @@ import org.springframework.boot.context.properties.ConfigurationPropertiesScan; ...@@ -26,14 +26,14 @@ import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean; 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 de.ozgcloud.token.saml.SamlTokenUtils;
import net.shibboleth.utilities.java.support.component.ComponentInitializationException; import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
import net.shibboleth.utilities.java.support.xml.BasicParserPool; import net.shibboleth.utilities.java.support.xml.BasicParserPool;
import net.shibboleth.utilities.java.support.xml.ParserPool; import net.shibboleth.utilities.java.support.xml.ParserPool;
@ConfigurationPropertiesScan("de.ozgcloud.token") @ConfigurationPropertiesScan("de.ozgcloud.token")
@EnableConfigurationProperties(TokenCheckProperties.class) @EnableConfigurationProperties(TokenValidationProperties.class)
public class TokenCheckTestConfiguration { public class TokenCheckTestConfiguration {
@Bean @Bean
ParserPool parserPool() throws ComponentInitializationException { ParserPool parserPool() throws ComponentInitializationException {
...@@ -48,8 +48,8 @@ public class TokenCheckTestConfiguration { ...@@ -48,8 +48,8 @@ public class TokenCheckTestConfiguration {
} }
@Bean @Bean
SamlSettingsRegistry samlSettingsRegistry() { SamlServiceRegistry samlSettingsRegistry() {
return new SamlSettingsRegistry(); return new SamlServiceRegistry();
} }
} }
...@@ -69,7 +69,7 @@ class Saml2DecryptionServiceTest { ...@@ -69,7 +69,7 @@ class Saml2DecryptionServiceTest {
var parserPool = SamlTokenTestUtils.initParserPool(); var parserPool = SamlTokenTestUtils.initParserPool();
var samlSettingsRegistry = SamlTokenTestUtils.initConfig(BAYERN_ID); 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() var responseUnmarshaller = (ResponseUnmarshaller) XMLObjectProviderRegistrySupport.getUnmarshallerFactory()
.getUnmarshaller(Response.DEFAULT_ELEMENT_NAME); .getUnmarshaller(Response.DEFAULT_ELEMENT_NAME);
parseService = new Saml2ParseService(parserPool, responseUnmarshaller); parseService = new Saml2ParseService(parserPool, responseUnmarshaller);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment