This is an automated email from the ASF dual-hosted git repository. pauls pushed a commit to branch issues/SLING-10099_2 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-serviceusermapper.git
commit 862a88b318ef317b3a84d133279f13141b6cff75 Author: Karl Pauls <[email protected]> AuthorDate: Fri Feb 12 10:47:29 2021 +0100 SLING-10099: separate user and principal validator require lists --- .../impl/ServiceUserMapperImpl.java | 41 +++++++++++++++------- .../impl/ServiceUserMapperImplTest.java | 7 ++-- 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImpl.java b/src/main/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImpl.java index 20d6073..b980c7e 100644 --- a/src/main/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImpl.java +++ b/src/main/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImpl.java @@ -91,10 +91,15 @@ public class ServiceUserMapperImpl implements ServiceUserMapper { description = "If true, a service user is only valid if there are present validators that accept it.") boolean require_validation() default false; - @AttributeDefinition(name = "Required Validators", - description = "A list of required validators ids. If any configured validator in this list is not present " + + @AttributeDefinition(name = "Required User Validators", + description = "A list of required user validators ids. If any configured validator in this list is not present " + "and \"require validation\" is enabled no userid and no principal name will be valid.") - String[] required_validators() default {}; + String[] required_user_validators() default {}; + + @AttributeDefinition(name = "Required Principal Validators", + description = "A list of required principal validators ids. If any configured validator in this list is not present " + + "and \"require validation\" is enabled no userid and no principal name will be valid.") + String[] required_principal_validators() default {}; } /** default log */ @@ -124,9 +129,13 @@ public class ServiceUserMapperImpl implements ServiceUserMapper { private volatile boolean requireValidation = false; - private final Set<String> requiredValidators = new HashSet<>(); + private final Set<String> requiredUserValidators = new HashSet<>(); + + private final Set<String> requiredPrincipalValidators = new HashSet<>(); - private final List<String> presentValidators = new CopyOnWriteArrayList<>(); + private final List<String> presentUserValidators = new CopyOnWriteArrayList<>(); + + private final List<String> presentPrincipalValidators = new CopyOnWriteArrayList<>(); @Activate public ServiceUserMapperImpl(final BundleContext bundleContext, final Config config) { @@ -168,9 +177,14 @@ public class ServiceUserMapperImpl implements ServiceUserMapper { this.useDefaultMapping = config.user_enable_default_mapping(); this.requireValidation = config.require_validation(); - if (config.required_validators() != null) { - requiredValidators.addAll(Arrays.asList(config.required_validators())); + if (config.required_user_validators() != null) { + requiredUserValidators.addAll(Arrays.asList(config.required_user_validators())); + } + + if (config.required_principal_validators() != null) { + requiredPrincipalValidators.addAll(Arrays.asList(config.required_principal_validators())); } + RegistrationSet registrationSet = this.updateMappings(); this.executeServiceRegistrationsAsync(registrationSet); @@ -200,8 +214,9 @@ public class ServiceUserMapperImpl implements ServiceUserMapper { userValidators.add(serviceUserValidator); Object id = props.get(VALIDATOR_ID); if (id instanceof String) { - presentValidators.add((String) id); + presentUserValidators.add((String) id); } + if (!requireValidation || !getPrincipalsValidators().isEmpty()) { restartAllActiveServiceUserMappedServices(); } @@ -215,8 +230,9 @@ public class ServiceUserMapperImpl implements ServiceUserMapper { userValidators.remove(serviceUserValidator); Object id = props.get(VALIDATOR_ID); if (id instanceof String) { - presentValidators.remove(id); + presentUserValidators.remove(id); } + restartAllActiveServiceUserMappedServices(); } @@ -229,8 +245,9 @@ public class ServiceUserMapperImpl implements ServiceUserMapper { principalsValidators.add(servicePrincipalsValidator); Object id = props.get(VALIDATOR_ID); if (id instanceof String) { - presentValidators.add((String) id); + presentPrincipalValidators.add((String) id); } + if (!requireValidation || !getUserValidators().isEmpty()) { restartAllActiveServiceUserMappedServices(); } @@ -244,7 +261,7 @@ public class ServiceUserMapperImpl implements ServiceUserMapper { principalsValidators.remove(servicePrincipalsValidator); Object id = props.get(VALIDATOR_ID); if (id instanceof String) { - presentValidators.remove(id); + presentPrincipalValidators.remove(id); } restartAllActiveServiceUserMappedServices(); } @@ -543,7 +560,7 @@ public class ServiceUserMapperImpl implements ServiceUserMapper { } private <T> List<T> getValidatorsIfPresent(List<T> validators) { - if (presentValidators.containsAll(requiredValidators)) { + if (presentUserValidators.containsAll(requiredUserValidators) && presentPrincipalValidators.containsAll(requiredPrincipalValidators)) { return validators; } else { return Collections.emptyList(); diff --git a/src/test/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImplTest.java b/src/test/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImplTest.java index ef9ad62..393a1e8 100644 --- a/src/test/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImplTest.java +++ b/src/test/java/org/apache/sling/serviceusermapping/impl/ServiceUserMapperImplTest.java @@ -103,7 +103,8 @@ public class ServiceUserMapperImplTest { public void test_requiredValidators() { ServiceUserMapperImpl.Config config = mock(ServiceUserMapperImpl.Config.class); when(config.require_validation()).thenReturn(true); - when(config.required_validators()).thenReturn(new String[] {"bla","bli","blub"}); + when(config.required_user_validators()).thenReturn(new String[] {"bla"}); + when(config.required_principal_validators()).thenReturn(new String[] {"bli","blub"}); final ServiceUserMapperImpl mapper = new ServiceUserMapperImpl(null, config) { @Override @@ -413,7 +414,7 @@ public class ServiceUserMapperImplTest { BUNDLE_SYMBOLIC1 + "=["+SAMPLE+"]", // BUNDLE_SYMBOLIC1 + ":" + SUB + "=["+SAMPLE+"," + SAMPLE_SUB + "]"// }); - when(config.required_validators()).thenReturn(new String[]{"requiredId_1", "requiredId_2"}); + when(config.required_user_validators()).thenReturn(new String[]{"requiredId_1", "requiredId_2"}); when(config.require_validation()).thenReturn(false); ServiceUserMapperImpl mapper = new ServiceUserMapperImpl(null, config); @@ -430,7 +431,7 @@ public class ServiceUserMapperImplTest { BUNDLE_SYMBOLIC1 + "=["+SAMPLE+"]", // BUNDLE_SYMBOLIC1 + ":" + SUB + "=["+SAMPLE+"," + SAMPLE_SUB + "]"// }); - when(config.required_validators()).thenReturn(new String[]{"requiredId_1", "requiredId_2"}); + when(config.required_principal_validators()).thenReturn(new String[]{"requiredId_1", "requiredId_2"}); when(config.require_validation()).thenReturn(true); ServiceUserMapperImpl mapper = new ServiceUserMapperImpl(null, config);
