[java-oidc-common] branch main updated: JCOMOIDC-96 - Support custom/additional metadata policy operators

Henri Mikkonen henri.mikkonen at iki.fi
Fri Jan 26 08:44:37 UTC 2024


This is an automated email from the git hooks/post-receive script.

hjmikkon pushed a commit to branch main
in repository java-oidc-common.

View the commit online:
http://git.shibboleth.net/view/?p=java-oidc-common.git;a=commit;h=3c8a5b69f50519159d308768ffc0a7004ce08d51

The following commit(s) were added to refs/heads/main by this push:
     new 3c8a5b6  JCOMOIDC-96 - Support custom/additional metadata policy operators
3c8a5b6 is described below

commit 3c8a5b69f50519159d308768ffc0a7004ce08d51
Author: Henri Mikkonen <henri.mikkonen at iki.fi>
AuthorDate: Fri Jan 26 10:43:40 2024 +0200

    JCOMOIDC-96 - Support custom/additional metadata policy operators
    
    https://shibboleth.atlassian.net/browse/JCOMOIDC-96
    
    Wire custom operators to unregistered client policies. Fine tuning and improved testing.
---
 .../oidc/metadata/policy/UnregisteredClientPolicy.java    |  1 +
 .../policy/impl/DefaultMetadataPolicyEnforcer.java        | 15 ++++++++++-----
 .../policy/impl/DefaultMetadataPolicyEnforcerTest.java    | 10 ++++++++++
 3 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/policy/UnregisteredClientPolicy.java b/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/policy/UnregisteredClientPolicy.java
index eca4e6f..e719abc 100644
--- a/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/policy/UnregisteredClientPolicy.java
+++ b/oidc-common-metadata-api/src/main/java/net/shibboleth/oidc/metadata/policy/UnregisteredClientPolicy.java
@@ -42,6 +42,7 @@ public class UnregisteredClientPolicy extends MetadataPolicy {
         setSubsetOfValues(metadataPolicy.getSubsetOfValues());
         setSupersetOfValues(metadataPolicy.getSupersetOfValues());
         setValue(metadataPolicy.getValue());
+        metadataPolicy.getCustomOperators().forEach((k, v) -> setCustomOperator(k, v));
     }
 
 }
diff --git a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/policy/impl/DefaultMetadataPolicyEnforcer.java b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/policy/impl/DefaultMetadataPolicyEnforcer.java
index d5ce8d1..5d96c1f 100644
--- a/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/policy/impl/DefaultMetadataPolicyEnforcer.java
+++ b/oidc-common-metadata-impl/src/main/java/net/shibboleth/oidc/metadata/policy/impl/DefaultMetadataPolicyEnforcer.java
@@ -122,11 +122,16 @@ public class DefaultMetadataPolicyEnforcer extends AbstractInitializableComponen
     @Nonnull protected Pair<Object, Boolean> applyCustomOperators(@Nullable final Object initialResult,
             @Nonnull final MetadataPolicy policy) {
         Object result = initialResult;
-        for (final String customOperator : customOperators.keySet()) {
-            try {
-                result = customOperators.get(customOperator).apply(result, policy);
-            } catch (final ConstraintViolationException e) {
-                log.debug("The custom operator {} did not accept the value {}", customOperator, result);
+        for (final String customOperator : policy.getCustomOperators().keySet()) {
+            if (customOperators.containsKey(customOperator)) {
+                try {
+                    result = customOperators.get(customOperator).apply(result, policy);
+                } catch (final ConstraintViolationException e) {
+                    log.debug("The custom operator {} did not accept the value {}", customOperator, result, e);
+                    return new Pair<>(result, Boolean.FALSE);
+                }
+            } else {
+                log.warn("The custom operator {} is not configured for this enforcer", customOperator);
                 return new Pair<>(result, Boolean.FALSE);
             }
         }
diff --git a/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/metadata/policy/impl/DefaultMetadataPolicyEnforcerTest.java b/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/metadata/policy/impl/DefaultMetadataPolicyEnforcerTest.java
index a1fec01..86ec593 100644
--- a/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/metadata/policy/impl/DefaultMetadataPolicyEnforcerTest.java
+++ b/oidc-common-metadata-impl/src/test/java/net/shibboleth/oidc/metadata/policy/impl/DefaultMetadataPolicyEnforcerTest.java
@@ -523,6 +523,16 @@ public class DefaultMetadataPolicyEnforcerTest {
                 new MetadataPolicy.Builder().withCustomOperator("customOperator", "mockId").build()));
     }
 
+    @Test
+    public void apply_whenCustomOperatorNotFound_resultIsFalse() {
+        final String candidate = "expectdValue";
+        CustomMetadataPolicyOperator customOperator = Mockito.mock(CustomMetadataPolicyOperator.class);
+        Mockito.doThrow(ConstraintViolationException.class).when(customOperator).apply(Mockito.any(), Mockito.any());
+        applier.setCustomMetadataPolicyOperators(CollectionSupport.singletonMap("customOperator", customOperator));
+        assertResultFalse(applier.apply(candidate,
+                new MetadataPolicy.Builder().withCustomOperator("nonExistingOperator", "mockId").build()));
+    }
+
     public static void assertResultEquals(final Pair<Object, Boolean> pair, final Object expected) {
         final Boolean flag = pair.getSecond(); 
         Assert.assertTrue(flag != null && flag);

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list