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();