From 4b84cdef8ea4be58a1896ba11fe20d3cb29b3b90 Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Tue, 11 Sep 2018 16:37:35 -0400 Subject: [PATCH] SHIBUI-836: wip --- .../admin/ui/ShibbolethUiApplication.java | 6 +++--- ...eholderResolverComponentsConfiguration.java | 6 ++++++ ...eholderTokenAwareValueResolvingService.java | 7 +++++++ .../admin/util/TokenPlaceholderResolvers.java | 18 ++++++++++++++++++ ...tadataResolverValidationServiceTests.groovy | 10 +++++----- 5 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 backend/src/main/java/edu/internet2/tier/shibboleth/admin/util/TokenPlaceholderResolvers.java diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/ShibbolethUiApplication.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/ShibbolethUiApplication.java index 6fea0aa99..aa19896ef 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/ShibbolethUiApplication.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/ShibbolethUiApplication.java @@ -2,6 +2,7 @@ import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository; import edu.internet2.tier.shibboleth.admin.ui.service.TokenPlaceholderValueResolvingService; +import edu.internet2.tier.shibboleth.admin.util.TokenPlaceholderResolvers; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; @@ -56,9 +57,8 @@ void showMetadataResolversResourceIds(ApplicationStartedEvent e) { System.out.println("IDP HOME: " + idpHome); String rawValue = "%{idp.home}/metadata/file.xml"; - boolean hasToken = rawValue.contains("%{idp.home}"); - String resolvedIdpHome = propertyResolver.resolvePlaceholders("${idp.home}"); - String fullyResolvedDir = rawValue.replace("%{idp.home}", resolvedIdpHome); + String resolved = propertyResolver.resolvePlaceholders(rawValue.replace("%{", "${")); + TokenPlaceholderValueResolvingService service = TokenPlaceholderResolvers.placeholderResolverService(); } } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/PlaceholderResolverComponentsConfiguration.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/PlaceholderResolverComponentsConfiguration.java index 08a0069d4..484675e3d 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/PlaceholderResolverComponentsConfiguration.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/PlaceholderResolverComponentsConfiguration.java @@ -1,6 +1,7 @@ package edu.internet2.tier.shibboleth.admin.ui.configuration; import edu.internet2.tier.shibboleth.admin.ui.service.TokenPlaceholderValueResolvingService; +import edu.internet2.tier.shibboleth.admin.util.TokenPlaceholderResolvers; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.PropertyResolver; @@ -12,4 +13,9 @@ public class PlaceholderResolverComponentsConfiguration { public TokenPlaceholderValueResolvingService tokenPlaceholderValueResolvingService(PropertyResolver propertyResolver) { return TokenPlaceholderValueResolvingService.shibbolethPlaceholderAware(propertyResolver); } + + @Bean + public TokenPlaceholderResolvers tokenPlaceholderResolvers(TokenPlaceholderValueResolvingService service) { + return new TokenPlaceholderResolvers(service); + } } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/ShibbolethPlaceholderTokenAwareValueResolvingService.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/ShibbolethPlaceholderTokenAwareValueResolvingService.java index 8de170b49..b4c6fd42a 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/ShibbolethPlaceholderTokenAwareValueResolvingService.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/ShibbolethPlaceholderTokenAwareValueResolvingService.java @@ -2,6 +2,10 @@ import org.springframework.core.env.PropertyResolver; +import java.util.Objects; + +import static java.util.Objects.requireNonNull; + /** * Implementation of {@link TokenPlaceholderValueResolvingService} based on Spring Framework's default property resolver * which understands and replaces Shibboleth Idp specific placeholder prefix of '%{' with standard Spring's placeholder @@ -21,6 +25,9 @@ public class ShibbolethPlaceholderTokenAwareValueResolvingService implements Tok @Override public String resolveValueFromTokenPlaceholder(String tokenPlaceholder) { + requireNonNull(tokenPlaceholder, "tokenPlaceholder must not be null"); + tokenPlaceholder.replace("%{", "${"); + return null; } } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/util/TokenPlaceholderResolvers.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/util/TokenPlaceholderResolvers.java new file mode 100644 index 000000000..f65737be2 --- /dev/null +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/util/TokenPlaceholderResolvers.java @@ -0,0 +1,18 @@ +package edu.internet2.tier.shibboleth.admin.util; + +import edu.internet2.tier.shibboleth.admin.ui.service.TokenPlaceholderValueResolvingService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +public class TokenPlaceholderResolvers { + + private static TokenPlaceholderValueResolvingService placeholderResolverService; + + public TokenPlaceholderResolvers(TokenPlaceholderValueResolvingService service) { + TokenPlaceholderResolvers.placeholderResolverService = service; + } + + public static TokenPlaceholderValueResolvingService placeholderResolverService() { + return placeholderResolverService; + } +} diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolverValidationServiceTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolverValidationServiceTests.groovy index d62f07170..eb6486916 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolverValidationServiceTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolverValidationServiceTests.groovy @@ -11,7 +11,7 @@ import static edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataRe class MetadataResolverValidationServiceTests extends Specification { def "Validation service with no available validators always returns default valid result"() { - given: 'Sample metadata resolver and validation service with no validators' + given: 'Sample metadata resolver and validation placeholderResolverService with no validators' def resolver = Mock(MetadataResolver) @Subject def validationService = new MetadataResolverValidationService(null) @@ -24,7 +24,7 @@ class MetadataResolverValidationServiceTests extends Specification { } def "Validation service with one validator not supporting the type of resolver returns default valid result"() { - given: 'Sample metadata resolver and validation service with one validator not supporting that type' + given: 'Sample metadata resolver and validation placeholderResolverService with one validator not supporting that type' def resolver = Mock(MetadataResolver) def validator = Mock(MetadataResolverValidator) validator.supports(_) >> false @@ -39,7 +39,7 @@ class MetadataResolverValidationServiceTests extends Specification { } def "Validation service with one validator supporting the type of resolver but fails its validation"() { - given: 'Sample metadata resolver and validation service with one validator supporting that type' + given: 'Sample metadata resolver and validation placeholderResolverService with one validator supporting that type' def resolver = Mock(MetadataResolver) def validator = Mock(MetadataResolverValidator) validator.supports(_) >> true @@ -55,7 +55,7 @@ class MetadataResolverValidationServiceTests extends Specification { } def "Validation service with with two validators supporting the type of resolver, first fails, second passes validation"() { - given: 'Sample metadata resolver and validation service with two validators supporting that type' + given: 'Sample metadata resolver and validation placeholderResolverService with two validators supporting that type' def resolver = Mock(MetadataResolver) def validator1 = Mock(MetadataResolverValidator) validator1.supports(_) >> true @@ -74,7 +74,7 @@ class MetadataResolverValidationServiceTests extends Specification { } def "Validation service with with two validators, only one supporting the type of resolver, passes validation"() { - given: 'Sample metadata resolver and validation service with two validators, with one supporting that type' + given: 'Sample metadata resolver and validation placeholderResolverService with two validators, with one supporting that type' def resolver = Mock(MetadataResolver) def validator1 = Mock(MetadataResolverValidator) validator1.supports(_) >> false