You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by mm...@apache.org on 2020/03/11 10:40:11 UTC

[syncope] branch SYNCOPE-163-1 updated: add support for auth criteria

This is an automated email from the ASF dual-hosted git repository.

mmoayyed pushed a commit to branch SYNCOPE-163-1
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/SYNCOPE-163-1 by this push:
     new b3ec32c  add support for auth criteria
b3ec32c is described below

commit b3ec32c796bb5d0c3a04212ec4cf5eadf2863447
Author: Misagh Moayyed <mm...@gmail.com>
AuthorDate: Wed Mar 11 14:09:42 2020 +0330

    add support for auth criteria
---
 .../policy/AbstractAuthenticationPolicyConf.java   | 11 ++++++
 ... AbstractAuthenticationPolicyCriteriaConf.java} | 13 ++++---
 .../policy/AuthenticationPolicyConf.java           | 12 +++++--
 ....java => AuthenticationPolicyCriteriaConf.java} | 13 +++++--
 ...> DefaultAuthenticationPolicyCriteriaConf.java} | 26 ++++++++------
 .../core/persistence/jpa/inner/PolicyTest.java     | 41 +++++++++++-----------
 6 files changed, 76 insertions(+), 40 deletions(-)

diff --git a/common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AbstractAuthenticationPolicyConf.java b/common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AbstractAuthenticationPolicyConf.java
index f93592b..cd66c14 100644
--- a/common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AbstractAuthenticationPolicyConf.java
+++ b/common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AbstractAuthenticationPolicyConf.java
@@ -30,6 +30,8 @@ public abstract class AbstractAuthenticationPolicyConf implements Serializable,
 
     private String name;
 
+    private AuthenticationPolicyCriteriaConf criteria;
+
     public AbstractAuthenticationPolicyConf() {
         setName(getClass().getName());
     }
@@ -39,6 +41,15 @@ public abstract class AbstractAuthenticationPolicyConf implements Serializable,
     }
 
     @Override
+    public AuthenticationPolicyCriteriaConf getCriteria() {
+        return criteria;
+    }
+
+    public void setCriteria(final AuthenticationPolicyCriteriaConf criteria) {
+        this.criteria = criteria;
+    }
+
+    @Override
     public final String getName() {
         return name;
     }
diff --git a/common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AbstractAuthenticationPolicyConf.java b/common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AbstractAuthenticationPolicyCriteriaConf.java
similarity index 76%
copy from common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AbstractAuthenticationPolicyConf.java
copy to common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AbstractAuthenticationPolicyCriteriaConf.java
index f93592b..f765574 100644
--- a/common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AbstractAuthenticationPolicyConf.java
+++ b/common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AbstractAuthenticationPolicyCriteriaConf.java
@@ -20,21 +20,23 @@ package org.apache.syncope.common.lib.authentication.policy;
 
 import javax.xml.bind.annotation.XmlSeeAlso;
 import javax.xml.bind.annotation.XmlType;
+
 import java.io.Serializable;
 
 @XmlType
-@XmlSeeAlso({ DefaultAuthenticationPolicyConf.class })
-public abstract class AbstractAuthenticationPolicyConf implements Serializable, AuthenticationPolicyConf {
+@XmlSeeAlso({DefaultAuthenticationPolicyCriteriaConf.class})
+public abstract class AbstractAuthenticationPolicyCriteriaConf
+    implements AuthenticationPolicyCriteriaConf, Serializable {
 
-    private static final long serialVersionUID = 9185127128182430142L;
+    private static final long serialVersionUID = -6882164291962510245L;
 
     private String name;
 
-    public AbstractAuthenticationPolicyConf() {
+    public AbstractAuthenticationPolicyCriteriaConf() {
         setName(getClass().getName());
     }
 
-    public AbstractAuthenticationPolicyConf(final String name) {
+    public AbstractAuthenticationPolicyCriteriaConf(final String name) {
         setName(name);
     }
 
@@ -46,4 +48,5 @@ public abstract class AbstractAuthenticationPolicyConf implements Serializable,
     public final void setName(final String name) {
         this.name = name;
     }
+
 }
diff --git a/common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AuthenticationPolicyConf.java b/common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AuthenticationPolicyConf.java
index 65a568c..3327bb4 100644
--- a/common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AuthenticationPolicyConf.java
+++ b/common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AuthenticationPolicyConf.java
@@ -19,16 +19,24 @@
 package org.apache.syncope.common.lib.authentication.policy;
 
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
+
 import java.io.Serializable;
 
-@FunctionalInterface
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
 public interface AuthenticationPolicyConf extends Serializable {
 
     /**
-     * Give name of related authentication module instance.
+     * Give name of related authentication policy instance.
      *
      * @return name of this authentication policy instance
      */
     String getName();
+
+    /**
+     * Gets the policy criteria linked to this policy
+     * to establish criteria for success.
+     *
+     * @return the criteria
+     */
+    AuthenticationPolicyCriteriaConf getCriteria();
 }
diff --git a/common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AuthenticationPolicyConf.java b/common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AuthenticationPolicyCriteriaConf.java
similarity index 70%
copy from common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AuthenticationPolicyConf.java
copy to common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AuthenticationPolicyCriteriaConf.java
index 65a568c..3e5c194 100644
--- a/common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AuthenticationPolicyConf.java
+++ b/common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AuthenticationPolicyCriteriaConf.java
@@ -19,14 +19,23 @@
 package org.apache.syncope.common.lib.authentication.policy;
 
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
+
 import java.io.Serializable;
 
+/**
+ * Determine the criteria by which the authentication policy
+ * should conduct itself. Typically, this translates to how
+ * the policy should execute the modules to establish a success
+ * criteria. Examples would include "all modules should validate the user"
+ * or "any module can validate the user" before the policy can consider it
+ * a success.
+ */
 @FunctionalInterface
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
-public interface AuthenticationPolicyConf extends Serializable {
+public interface AuthenticationPolicyCriteriaConf extends Serializable {
 
     /**
-     * Give name of related authentication module instance.
+     * Describe the name of the authentication policy criteria.
      *
      * @return name of this authentication policy instance
      */
diff --git a/common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AuthenticationPolicyConf.java b/common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/DefaultAuthenticationPolicyCriteriaConf.java
similarity index 64%
copy from common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AuthenticationPolicyConf.java
copy to common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/DefaultAuthenticationPolicyCriteriaConf.java
index 65a568c..68f7ca7 100644
--- a/common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/AuthenticationPolicyConf.java
+++ b/common/am/lib/src/main/java/org/apache/syncope/common/lib/authentication/policy/DefaultAuthenticationPolicyCriteriaConf.java
@@ -18,17 +18,21 @@
  */
 package org.apache.syncope.common.lib.authentication.policy;
 
-import com.fasterxml.jackson.annotation.JsonTypeInfo;
-import java.io.Serializable;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
 
-@FunctionalInterface
-@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class")
-public interface AuthenticationPolicyConf extends Serializable {
+@XmlRootElement(name = "AnyAuthenticationPolicyCriteriaConf")
+@XmlType
+public class DefaultAuthenticationPolicyCriteriaConf extends AbstractAuthenticationPolicyCriteriaConf {
+    private static final long serialVersionUID = 3928807032588105869L;
 
-    /**
-     * Give name of related authentication module instance.
-     *
-     * @return name of this authentication policy instance
-     */
-    String getName();
+    private boolean all;
+
+    public boolean isAll() {
+        return all;
+    }
+
+    public void setAll(final boolean all) {
+        this.all = all;
+    }
 }
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java
index 89ae701..ddd9e18 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/PolicyTest.java
@@ -18,18 +18,14 @@
  */
 package org.apache.syncope.core.persistence.jpa.inner;
 
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-import java.util.Map;
-import java.util.List;
-import java.util.UUID;
+import org.apache.syncope.common.lib.access.DefaultAccessPolicyConf;
+import org.apache.syncope.common.lib.attrs.AllowedAttrReleasePolicyConf;
+import org.apache.syncope.common.lib.authentication.policy.DefaultAuthenticationPolicyConf;
+import org.apache.syncope.common.lib.authentication.policy.DefaultAuthenticationPolicyCriteriaConf;
 import org.apache.syncope.common.lib.policy.DefaultPasswordRuleConf;
 import org.apache.syncope.common.lib.policy.DefaultPullCorrelationRuleConf;
 import org.apache.syncope.common.lib.policy.DefaultPushCorrelationRuleConf;
+import org.apache.syncope.common.lib.types.AMImplementationType;
 import org.apache.syncope.common.lib.types.ConflictResolutionAction;
 import org.apache.syncope.common.lib.types.IdMImplementationType;
 import org.apache.syncope.common.lib.types.IdRepoImplementationType;
@@ -39,6 +35,8 @@ import org.apache.syncope.core.persistence.api.dao.ImplementationDAO;
 import org.apache.syncope.core.persistence.api.dao.PolicyDAO;
 import org.apache.syncope.core.persistence.api.dao.PullCorrelationRule;
 import org.apache.syncope.core.persistence.api.entity.Implementation;
+import org.apache.syncope.core.persistence.api.entity.policy.AccessPolicy;
+import org.apache.syncope.core.persistence.api.entity.policy.AttrReleasePolicy;
 import org.apache.syncope.core.persistence.api.entity.policy.AuthenticationPolicy;
 import org.apache.syncope.core.persistence.api.entity.policy.PasswordPolicy;
 import org.apache.syncope.core.persistence.api.entity.policy.Policy;
@@ -46,18 +44,18 @@ import org.apache.syncope.core.persistence.api.entity.policy.PullCorrelationRule
 import org.apache.syncope.core.persistence.api.entity.policy.PullPolicy;
 import org.apache.syncope.core.persistence.api.entity.policy.PushCorrelationRuleEntity;
 import org.apache.syncope.core.persistence.api.entity.policy.PushPolicy;
-import org.apache.syncope.common.lib.access.DefaultAccessPolicyConf;
-import org.apache.syncope.common.lib.attrs.AllowedAttrReleasePolicyConf;
-import org.apache.syncope.common.lib.authentication.policy.DefaultAuthenticationPolicyConf;
-import org.apache.syncope.common.lib.types.AMImplementationType;
-import org.apache.syncope.core.persistence.api.entity.policy.AccessPolicy;
-import org.apache.syncope.core.persistence.api.entity.policy.AttrReleasePolicy;
 import org.apache.syncope.core.persistence.jpa.AbstractTest;
 import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import static org.junit.jupiter.api.Assertions.*;
+
 @Transactional("Master")
 public class PolicyTest extends AbstractTest {
 
@@ -85,7 +83,7 @@ public class PolicyTest extends AbstractTest {
         PullCorrelationRuleEntity pullCR = pullPolicy.getCorrelationRule(anyTypeDAO.findUser()).orElse(null);
         assertNotNull(pullCR);
         DefaultPullCorrelationRuleConf pullCRConf =
-                POJOHelper.deserialize(pullCR.getImplementation().getBody(), DefaultPullCorrelationRuleConf.class);
+            POJOHelper.deserialize(pullCR.getImplementation().getBody(), DefaultPullCorrelationRuleConf.class);
         assertNotNull(pullCRConf);
         assertEquals(2, pullCRConf.getSchemas().size());
         assertTrue(pullCRConf.getSchemas().contains("username"));
@@ -97,7 +95,7 @@ public class PolicyTest extends AbstractTest {
         PushCorrelationRuleEntity pushCR = pushPolicy.getCorrelationRule(anyTypeDAO.findUser()).orElse(null);
         assertNotNull(pushCR);
         DefaultPushCorrelationRuleConf pushCRConf =
-                POJOHelper.deserialize(pushCR.getImplementation().getBody(), DefaultPushCorrelationRuleConf.class);
+            POJOHelper.deserialize(pushCR.getImplementation().getBody(), DefaultPushCorrelationRuleConf.class);
         assertNotNull(pushCRConf);
         assertEquals(1, pushCRConf.getSchemas().size());
         assertTrue(pushCRConf.getSchemas().contains("surname"));
@@ -183,9 +181,9 @@ public class PolicyTest extends AbstractTest {
 
         assertNotNull(policy);
         assertEquals(pullURuleName,
-                policy.getCorrelationRule(anyTypeDAO.findUser()).get().getImplementation().getKey());
+            policy.getCorrelationRule(anyTypeDAO.findUser()).get().getImplementation().getKey());
         assertEquals(pullGRuleName,
-                policy.getCorrelationRule(anyTypeDAO.findGroup()).get().getImplementation().getKey());
+            policy.getCorrelationRule(anyTypeDAO.findGroup()).get().getImplementation().getKey());
 
         int beforeCount = policyDAO.findAll().size();
         AccessPolicy accessPolicy = entityFactory.newEntity(AccessPolicy.class);
@@ -219,7 +217,10 @@ public class PolicyTest extends AbstractTest {
 
         DefaultAuthenticationPolicyConf authPolicyConf = new DefaultAuthenticationPolicyConf();
         authPolicyConf.setAuthenticationModules(List.of("LdapAuthentication1", "DatabaseAuthentication2"));
-
+        DefaultAuthenticationPolicyCriteriaConf criteria = new DefaultAuthenticationPolicyCriteriaConf();
+        criteria.setName("DefaultConf");
+        criteria.setAll(true);
+        authPolicyConf.setCriteria(criteria);
         Implementation authPolicyType = entityFactory.newEntity(Implementation.class);
         authPolicyType.setKey("AuthPolicyConfKey");
         authPolicyType.setEngine(ImplementationEngine.JAVA);