You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2023/03/14 11:51:49 UTC

[syncope] 02/02: [SYNCOPE-1737] Restored missing WAClientApp#getAuthModules population (#425)

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

ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git

commit 3106f99013a684867f64a59544e5c21f91811aca
Author: Francesco Chicchiriccò <il...@users.noreply.github.com>
AuthorDate: Tue Mar 14 12:49:36 2023 +0100

    [SYNCOPE-1737] Restored missing WAClientApp#getAuthModules population (#425)
---
 .../provisioning/java/ProvisioningContext.java     | 12 ++++++++---
 .../java/data/wa/WAClientAppDataBinderImpl.java    | 23 +++++++++++++++++++++-
 .../wa/starter/mapping/DefaultAuthMapper.java      |  5 +++--
 .../syncope/wa/starter/WAServiceRegistryTest.java  |  6 +++++-
 4 files changed, 39 insertions(+), 7 deletions(-)

diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ProvisioningContext.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ProvisioningContext.java
index 9e22085281..6361102ca2 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ProvisioningContext.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ProvisioningContext.java
@@ -36,6 +36,7 @@ import org.apache.syncope.core.persistence.api.dao.AnyTypeClassDAO;
 import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
 import org.apache.syncope.core.persistence.api.dao.ApplicationDAO;
 import org.apache.syncope.core.persistence.api.dao.AuditConfDAO;
+import org.apache.syncope.core.persistence.api.dao.AuthModuleDAO;
 import org.apache.syncope.core.persistence.api.dao.ConnInstanceDAO;
 import org.apache.syncope.core.persistence.api.dao.DelegationDAO;
 import org.apache.syncope.core.persistence.api.dao.DerSchemaDAO;
@@ -1223,8 +1224,13 @@ public class ProvisioningContext {
     public WAClientAppDataBinder waClientAppDataBinder(
             final ClientAppDataBinder clientAppDataBinder,
             final PolicyDataBinder policyDataBinder,
-            final AuthModuleDataBinder authModuleDataBinder) {
-
-        return new WAClientAppDataBinderImpl(clientAppDataBinder, policyDataBinder, authModuleDataBinder);
+            final AuthModuleDataBinder authModuleDataBinder,
+            final AuthModuleDAO authModuleDAO) {
+
+        return new WAClientAppDataBinderImpl(
+                clientAppDataBinder,
+                policyDataBinder,
+                authModuleDataBinder,
+                authModuleDAO);
     }
 }
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/wa/WAClientAppDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/wa/WAClientAppDataBinderImpl.java
index c43678ace8..cfc65f71fb 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/wa/WAClientAppDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/wa/WAClientAppDataBinderImpl.java
@@ -18,7 +18,11 @@
  */
 package org.apache.syncope.core.provisioning.java.data.wa;
 
+import org.apache.syncope.common.lib.policy.AuthPolicyConf;
+import org.apache.syncope.common.lib.policy.DefaultAuthPolicyConf;
 import org.apache.syncope.common.lib.wa.WAClientApp;
+import org.apache.syncope.core.persistence.api.dao.AuthModuleDAO;
+import org.apache.syncope.core.persistence.api.entity.am.AuthModule;
 import org.apache.syncope.core.persistence.api.entity.am.ClientApp;
 import org.apache.syncope.core.provisioning.api.data.AuthModuleDataBinder;
 import org.apache.syncope.core.provisioning.api.data.ClientAppDataBinder;
@@ -37,14 +41,18 @@ public class WAClientAppDataBinderImpl implements WAClientAppDataBinder {
 
     protected final AuthModuleDataBinder authModuleDataBinder;
 
+    protected final AuthModuleDAO authModuleDAO;
+
     public WAClientAppDataBinderImpl(
             final ClientAppDataBinder clientAppDataBinder,
             final PolicyDataBinder policyDataBinder,
-            final AuthModuleDataBinder authModuleDataBinder) {
+            final AuthModuleDataBinder authModuleDataBinder,
+            final AuthModuleDAO authModuleDAO) {
 
         this.clientAppDataBinder = clientAppDataBinder;
         this.policyDataBinder = policyDataBinder;
         this.authModuleDataBinder = authModuleDataBinder;
+        this.authModuleDAO = authModuleDAO;
     }
 
     @Override
@@ -53,11 +61,24 @@ public class WAClientAppDataBinderImpl implements WAClientAppDataBinder {
         waClientApp.setClientAppTO(clientAppDataBinder.getClientAppTO(clientApp));
 
         try {
+            AuthPolicyConf authPolicyConf = null;
             if (clientApp.getAuthPolicy() != null) {
+                authPolicyConf = clientApp.getAuthPolicy().getConf();
                 waClientApp.setAuthPolicy(policyDataBinder.getPolicyTO(clientApp.getAuthPolicy()));
             } else if (clientApp.getRealm() != null && clientApp.getRealm().getAuthPolicy() != null) {
+                authPolicyConf = clientApp.getRealm().getAuthPolicy().getConf();
                 waClientApp.setAuthPolicy(policyDataBinder.getPolicyTO(clientApp.getRealm().getAuthPolicy()));
             }
+            if (authPolicyConf instanceof DefaultAuthPolicyConf) {
+                ((DefaultAuthPolicyConf) authPolicyConf).getAuthModules().forEach(key -> {
+                    AuthModule authModule = authModuleDAO.find(key);
+                    if (authModule == null) {
+                        LOG.warn("AuthModule " + authModule + " not found");
+                    } else {
+                        waClientApp.getAuthModules().add(authModuleDataBinder.getAuthModuleTO(authModule));
+                    }
+                });
+            }
 
             if (clientApp.getAccessPolicy() != null) {
                 waClientApp.setAccessPolicy(policyDataBinder.getPolicyTO(clientApp.getAccessPolicy()));
diff --git a/wa/starter/src/main/java/org/apache/syncope/wa/starter/mapping/DefaultAuthMapper.java b/wa/starter/src/main/java/org/apache/syncope/wa/starter/mapping/DefaultAuthMapper.java
index ad6333e714..37c08cd1fc 100644
--- a/wa/starter/src/main/java/org/apache/syncope/wa/starter/mapping/DefaultAuthMapper.java
+++ b/wa/starter/src/main/java/org/apache/syncope/wa/starter/mapping/DefaultAuthMapper.java
@@ -61,8 +61,9 @@ public class DefaultAuthMapper implements AuthMapper {
         Set<Pair<String, String>> delegatedAuthHandlers = new HashSet<>();
 
         DefaultAuthPolicyConf policyConf = (DefaultAuthPolicyConf) policy.getConf();
-        if (!policyConf.getAuthModules().isEmpty()) {
-            Set<String> authHandlers = new HashSet<>(policyConf.getAuthModules());
+        Set<String> authHandlers = authModules.stream().map(AuthModuleTO::getKey).
+                collect(Collectors.toCollection(HashSet::new));
+        if (!authHandlers.isEmpty()) {
             mfaAuthHandlers.addAll(authEventExecPlan.getObject().getAuthenticationHandlers().stream().
                     filter(MultifactorAuthenticationHandler.class::isInstance).
                     filter(mfaAuthHander -> policyConf.getAuthModules().contains(mfaAuthHander.getName())).
diff --git a/wa/starter/src/test/java/org/apache/syncope/wa/starter/WAServiceRegistryTest.java b/wa/starter/src/test/java/org/apache/syncope/wa/starter/WAServiceRegistryTest.java
index d4733ed0af..87e6303d15 100644
--- a/wa/starter/src/test/java/org/apache/syncope/wa/starter/WAServiceRegistryTest.java
+++ b/wa/starter/src/test/java/org/apache/syncope/wa/starter/WAServiceRegistryTest.java
@@ -104,6 +104,10 @@ public class WAServiceRegistryTest extends AbstractTest {
 
         waClientApp.setAuthPolicy(authPolicy);
 
+        AuthModuleTO authModule = new AuthModuleTO();
+        authModule.setKey("TestAuthModule");
+        waClientApp.getAuthModules().add(authModule);
+
         AccessPolicyTO accessPolicy = new AccessPolicyTO();
         DefaultAccessPolicyConf accessPolicyConf = new DefaultAccessPolicyConf();
         accessPolicyConf.setEnabled(true);
@@ -260,7 +264,7 @@ public class WAServiceRegistryTest extends AbstractTest {
         assertNotNull(service);
 
         assertEquals(
-                Set.of("DelegatedClientAuthenticationHandler"),
+                Set.of("TestAuthModule", "DelegatedClientAuthenticationHandler"),
                 service.getAuthenticationPolicy().getRequiredAuthenticationHandlers());
 
         RegisteredServiceAccessStrategy accessStrategy = service.getAccessStrategy();