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

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


The following commit(s) were added to refs/heads/3_0_X by this push:
     new 9d863b98a7 Ensure to consider implementation types from extensions
9d863b98a7 is described below

commit 9d863b98a75d5ac2b32f8f6b82febd0b560b3384
Author: Francesco Chicchiriccò <[email protected]>
AuthorDate: Mon May 29 10:44:34 2023 +0200

    Ensure to consider implementation types from extensions
---
 .../init/ClassPathScanImplementationLookup.java    | 89 +++++++++-------------
 .../syncope/core/logic/init/OIDCC4UILoader.java    |  3 +-
 ...4UILoader.java => AbstractSAML2SP4UILogic.java} | 29 ++-----
 .../syncope/core/logic/SAML2SP4UIIdPLogic.java     | 13 ++--
 .../apache/syncope/core/logic/SAML2SP4UILogic.java | 16 ++--
 .../syncope/core/logic/SAML2SP4UILogicContext.java | 24 +++---
 .../syncope/core/logic/init/SAML2SP4UILoader.java  | 58 +-------------
 7 files changed, 76 insertions(+), 156 deletions(-)

diff --git 
a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/init/ClassPathScanImplementationLookup.java
 
b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/init/ClassPathScanImplementationLookup.java
index 6d6b85fae7..06ceec9122 100644
--- 
a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/init/ClassPathScanImplementationLookup.java
+++ 
b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/init/ClassPathScanImplementationLookup.java
@@ -23,8 +23,10 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Objects;
 import java.util.Set;
+import java.util.stream.Collectors;
 import org.apache.syncope.common.lib.policy.AccountRuleConf;
 import org.apache.syncope.common.lib.policy.PasswordRuleConf;
 import org.apache.syncope.common.lib.policy.PullCorrelationRuleConf;
@@ -62,6 +64,7 @@ import 
org.apache.syncope.core.provisioning.java.pushpull.PushJobDelegate;
 import org.apache.syncope.core.spring.security.JWTSSOProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.config.BeanDefinition;
 import 
org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
 import org.springframework.core.Ordered;
 import org.springframework.core.type.filter.AssignableTypeFilter;
@@ -119,6 +122,11 @@ public class ClassPathScanImplementationLookup implements 
ImplementationLookup {
             }
         });
 
+        Map<String, String> extImplTypes = 
ImplementationTypesHolder.getInstance().getValues().entrySet().stream().
+                filter(e -> 
!IdRepoImplementationType.values().containsKey(e.getKey())
+                && !IdMImplementationType.values().containsKey(e.getKey())).
+                collect(Collectors.toMap(Entry::getKey, Entry::getValue));
+
         jwtSSOProviderClasses = new HashSet<>();
         reportJobDelegateClasses = new HashMap<>();
         accountRuleClasses = new HashMap<>();
@@ -126,18 +134,18 @@ public class ClassPathScanImplementationLookup implements 
ImplementationLookup {
         pullCRClasses = new HashMap<>();
         pushCRClasses = new HashMap<>();
 
-        scanner.findCandidateComponents(getBasePackage()).forEach(bd -> {
+        for (BeanDefinition bd : 
scanner.findCandidateComponents(getBasePackage())) {
             try {
                 Class<?> clazz = ClassUtils.resolveClassName(
                         Objects.requireNonNull(bd.getBeanClassName()), 
ClassUtils.getDefaultClassLoader());
-                boolean isAbstractClazz = 
Modifier.isAbstract(clazz.getModifiers());
+                if (Modifier.isAbstract(clazz.getModifiers())) {
+                    continue;
+                }
 
-                if (JWTSSOProvider.class.isAssignableFrom(clazz) && 
!isAbstractClazz) {
+                if (JWTSSOProvider.class.isAssignableFrom(clazz)) {
                     
classNames.get(IdRepoImplementationType.JWT_SSO_PROVIDER).add(clazz.getName());
                     jwtSSOProviderClasses.add(clazz);
-                }
-
-                if (ReportJobDelegate.class.isAssignableFrom(clazz) && 
!isAbstractClazz) {
+                } else if (ReportJobDelegate.class.isAssignableFrom(clazz)) {
                     ReportConfClass annotation = 
clazz.getAnnotation(ReportConfClass.class);
                     if (annotation == null) {
                         LOG.warn("Found Report {} without declared 
configuration", clazz.getName());
@@ -145,9 +153,7 @@ public class ClassPathScanImplementationLookup implements 
ImplementationLookup {
                         
classNames.get(IdRepoImplementationType.REPORT_DELEGATE).add(clazz.getName());
                         reportJobDelegateClasses.put(annotation.value(), 
(Class<? extends ReportJobDelegate>) clazz);
                     }
-                }
-
-                if (AccountRule.class.isAssignableFrom(clazz) && 
!isAbstractClazz) {
+                } else if (AccountRule.class.isAssignableFrom(clazz)) {
                     AccountRuleConfClass annotation = 
clazz.getAnnotation(AccountRuleConfClass.class);
                     if (annotation == null) {
                         LOG.warn("Found account policy rule {} without 
declared configuration", clazz.getName());
@@ -155,9 +161,7 @@ public class ClassPathScanImplementationLookup implements 
ImplementationLookup {
                         
classNames.get(IdRepoImplementationType.ACCOUNT_RULE).add(clazz.getName());
                         accountRuleClasses.put(annotation.value(), (Class<? 
extends AccountRule>) clazz);
                     }
-                }
-
-                if (PasswordRule.class.isAssignableFrom(clazz) && 
!isAbstractClazz) {
+                } else if (PasswordRule.class.isAssignableFrom(clazz)) {
                     PasswordRuleConfClass annotation = 
clazz.getAnnotation(PasswordRuleConfClass.class);
                     if (annotation == null) {
                         LOG.warn("Found password policy rule {} without 
declared configuration", clazz.getName());
@@ -165,9 +169,7 @@ public class ClassPathScanImplementationLookup implements 
ImplementationLookup {
                         
classNames.get(IdRepoImplementationType.PASSWORD_RULE).add(clazz.getName());
                         passwordRuleClasses.put(annotation.value(), (Class<? 
extends PasswordRule>) clazz);
                     }
-                }
-
-                if (PullCorrelationRule.class.isAssignableFrom(clazz) && 
!isAbstractClazz) {
+                } else if (PullCorrelationRule.class.isAssignableFrom(clazz)) {
                     PullCorrelationRuleConfClass annotation = 
clazz.getAnnotation(PullCorrelationRuleConfClass.class);
                     if (annotation == null) {
                         LOG.warn("Found pull correlation rule {} without 
declared configuration", clazz.getName());
@@ -175,9 +177,7 @@ public class ClassPathScanImplementationLookup implements 
ImplementationLookup {
                         
classNames.get(IdMImplementationType.PULL_CORRELATION_RULE).add(clazz.getName());
                         pullCRClasses.put(annotation.value(), (Class<? extends 
PullCorrelationRule>) clazz);
                     }
-                }
-
-                if (PushCorrelationRule.class.isAssignableFrom(clazz) && 
!isAbstractClazz) {
+                } else if (PushCorrelationRule.class.isAssignableFrom(clazz)) {
                     PushCorrelationRuleConfClass annotation = 
clazz.getAnnotation(PushCorrelationRuleConfClass.class);
                     if (annotation == null) {
                         LOG.warn("Found push correlation rule {} without 
declared configuration", clazz.getName());
@@ -185,61 +185,46 @@ public class ClassPathScanImplementationLookup implements 
ImplementationLookup {
                         
classNames.get(IdMImplementationType.PUSH_CORRELATION_RULE).add(clazz.getName());
                         pushCRClasses.put(annotation.value(), (Class<? extends 
PushCorrelationRule>) clazz);
                     }
-                }
-
-                if (ItemTransformer.class.isAssignableFrom(clazz) && 
!isAbstractClazz
+                } else if (ItemTransformer.class.isAssignableFrom(clazz)
                         && !clazz.equals(JEXLItemTransformerImpl.class)) {
 
                     
classNames.get(IdRepoImplementationType.ITEM_TRANSFORMER).add(clazz.getName());
-                }
-
-                if (SchedTaskJobDelegate.class.isAssignableFrom(clazz) && 
!isAbstractClazz
+                } else if (SchedTaskJobDelegate.class.isAssignableFrom(clazz)
                         && !PullJobDelegate.class.isAssignableFrom(clazz)
                         && !PushJobDelegate.class.isAssignableFrom(clazz)
                         && 
!GroupMemberProvisionTaskJobDelegate.class.isAssignableFrom(clazz)) {
 
                     
classNames.get(IdRepoImplementationType.TASKJOB_DELEGATE).add(bd.getBeanClassName());
-                }
-
-                if (ReconFilterBuilder.class.isAssignableFrom(clazz) && 
!isAbstractClazz) {
+                } else if (ReconFilterBuilder.class.isAssignableFrom(clazz)) {
                     
classNames.get(IdMImplementationType.RECON_FILTER_BUILDER).add(bd.getBeanClassName());
-                }
-
-                if (LogicActions.class.isAssignableFrom(clazz) && 
!isAbstractClazz) {
+                } else if (LogicActions.class.isAssignableFrom(clazz)) {
                     
classNames.get(IdRepoImplementationType.LOGIC_ACTIONS).add(bd.getBeanClassName());
-                }
-
-                if (PropagationActions.class.isAssignableFrom(clazz) && 
!isAbstractClazz) {
+                } else if (PropagationActions.class.isAssignableFrom(clazz)) {
                     
classNames.get(IdMImplementationType.PROPAGATION_ACTIONS).add(bd.getBeanClassName());
-                }
-
-                if (PullActions.class.isAssignableFrom(clazz) && 
!isAbstractClazz) {
+                } else if (PullActions.class.isAssignableFrom(clazz)) {
                     
classNames.get(IdMImplementationType.PULL_ACTIONS).add(bd.getBeanClassName());
-                }
-
-                if (PushActions.class.isAssignableFrom(clazz) && 
!isAbstractClazz) {
+                } else if (PushActions.class.isAssignableFrom(clazz)) {
                     
classNames.get(IdMImplementationType.PUSH_ACTIONS).add(bd.getBeanClassName());
-                }
-
-                if (PlainAttrValueValidator.class.isAssignableFrom(clazz) && 
!isAbstractClazz) {
+                } else if 
(PlainAttrValueValidator.class.isAssignableFrom(clazz)) {
                     
classNames.get(IdRepoImplementationType.VALIDATOR).add(bd.getBeanClassName());
-                }
-
-                if (RecipientsProvider.class.isAssignableFrom(clazz) && 
!isAbstractClazz) {
+                } else if (RecipientsProvider.class.isAssignableFrom(clazz)) {
                     
classNames.get(IdRepoImplementationType.RECIPIENTS_PROVIDER).add(bd.getBeanClassName());
-                }
-
-                if (ProvisionSorter.class.isAssignableFrom(clazz) && 
!isAbstractClazz) {
+                } else if (ProvisionSorter.class.isAssignableFrom(clazz)) {
                     
classNames.get(IdMImplementationType.PROVISION_SORTER).add(bd.getBeanClassName());
-                }
-
-                if (Command.class.isAssignableFrom(clazz) && !isAbstractClazz) 
{
+                } else if (Command.class.isAssignableFrom(clazz)) {
                     
classNames.get(IdRepoImplementationType.COMMAND).add(bd.getBeanClassName());
+                } else {
+                    extImplTypes.forEach((typeName, typeInterface) -> {
+                        Class<?> tic = 
ClassUtils.resolveClassName(typeInterface, ClassUtils.getDefaultClassLoader());
+                        if (tic.isAssignableFrom(clazz)) {
+                            
classNames.get(typeName).add(bd.getBeanClassName());
+                        }
+                    });
                 }
             } catch (Throwable t) {
                 LOG.warn("Could not inspect class {}", bd.getBeanClassName(), 
t);
             }
-        });
+        }
 
         classNames = Collections.unmodifiableMap(classNames);
         LOG.debug("Implementation classes found: {}", classNames);
diff --git 
a/ext/oidcc4ui/logic/src/main/java/org/apache/syncope/core/logic/init/OIDCC4UILoader.java
 
b/ext/oidcc4ui/logic/src/main/java/org/apache/syncope/core/logic/init/OIDCC4UILoader.java
index b6f2722f96..93d240a484 100644
--- 
a/ext/oidcc4ui/logic/src/main/java/org/apache/syncope/core/logic/init/OIDCC4UILoader.java
+++ 
b/ext/oidcc4ui/logic/src/main/java/org/apache/syncope/core/logic/init/OIDCC4UILoader.java
@@ -23,12 +23,13 @@ import 
org.apache.syncope.common.lib.types.ImplementationTypesHolder;
 import org.apache.syncope.common.lib.types.OIDC4UIEntitlement;
 import org.apache.syncope.common.lib.types.OIDCClientImplementationType;
 import org.apache.syncope.core.persistence.api.SyncopeCoreLoader;
+import org.springframework.core.Ordered;
 
 public class OIDCC4UILoader implements SyncopeCoreLoader {
 
     @Override
     public int getOrder() {
-        return 1000;
+        return Ordered.HIGHEST_PRECEDENCE;
     }
 
     @Override
diff --git 
a/ext/saml2sp4ui/logic/src/main/java/org/apache/syncope/core/logic/init/SAML2SP4UILoader.java
 
b/ext/saml2sp4ui/logic/src/main/java/org/apache/syncope/core/logic/AbstractSAML2SP4UILogic.java
similarity index 73%
copy from 
ext/saml2sp4ui/logic/src/main/java/org/apache/syncope/core/logic/init/SAML2SP4UILoader.java
copy to 
ext/saml2sp4ui/logic/src/main/java/org/apache/syncope/core/logic/AbstractSAML2SP4UILogic.java
index f1aa3748c0..046acdd99a 100644
--- 
a/ext/saml2sp4ui/logic/src/main/java/org/apache/syncope/core/logic/init/SAML2SP4UILoader.java
+++ 
b/ext/saml2sp4ui/logic/src/main/java/org/apache/syncope/core/logic/AbstractSAML2SP4UILogic.java
@@ -16,47 +16,34 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.syncope.core.logic.init;
+package org.apache.syncope.core.logic;
 
 import java.io.InputStream;
 import java.security.KeyStore;
 import java.security.PrivateKey;
 import java.security.cert.X509Certificate;
-import org.apache.syncope.common.lib.types.EntitlementsHolder;
-import org.apache.syncope.common.lib.types.ImplementationTypesHolder;
-import org.apache.syncope.common.lib.types.SAML2SP4UIEntitlement;
-import org.apache.syncope.common.lib.types.SAML2SP4UIImplementationType;
-import org.apache.syncope.core.logic.SAML2SP4UIProperties;
+import org.apache.syncope.common.lib.to.EntityTO;
 import org.apache.syncope.core.logic.saml2.NoOpLogoutHandler;
-import org.apache.syncope.core.persistence.api.SyncopeCoreLoader;
 import org.pac4j.saml.config.SAML2Configuration;
 import org.pac4j.saml.metadata.keystore.BaseSAML2KeystoreGenerator;
 import org.springframework.core.io.FileUrlResource;
 import org.springframework.core.io.support.ResourcePatternResolver;
 
-public class SAML2SP4UILoader implements SyncopeCoreLoader {
+abstract class AbstractSAML2SP4UILogic extends 
AbstractTransactionalLogic<EntityTO> {
 
     protected final SAML2SP4UIProperties props;
 
     protected final ResourcePatternResolver resourceResolver;
 
-    public SAML2SP4UILoader(final SAML2SP4UIProperties props, final 
ResourcePatternResolver resourceResolver) {
+    protected AbstractSAML2SP4UILogic(
+            final SAML2SP4UIProperties props,
+            final ResourcePatternResolver resourceResolver) {
+
         this.props = props;
         this.resourceResolver = resourceResolver;
     }
 
-    @Override
-    public int getOrder() {
-        return 1000;
-    }
-
-    @Override
-    public void load() {
-        
EntitlementsHolder.getInstance().addAll(SAML2SP4UIEntitlement.values());
-        
ImplementationTypesHolder.getInstance().putAll(SAML2SP4UIImplementationType.values());
-    }
-
-    public SAML2Configuration newSAML2Configuration() {
+    protected SAML2Configuration newSAML2Configuration() {
         SAML2Configuration cfg = new SAML2Configuration(
                 resourceResolver.getResource(props.getKeystore()),
                 props.getKeystoreStorepass(),
diff --git 
a/ext/saml2sp4ui/logic/src/main/java/org/apache/syncope/core/logic/SAML2SP4UIIdPLogic.java
 
b/ext/saml2sp4ui/logic/src/main/java/org/apache/syncope/core/logic/SAML2SP4UIIdPLogic.java
index 6047a33134..98456e8b28 100644
--- 
a/ext/saml2sp4ui/logic/src/main/java/org/apache/syncope/core/logic/SAML2SP4UIIdPLogic.java
+++ 
b/ext/saml2sp4ui/logic/src/main/java/org/apache/syncope/core/logic/SAML2SP4UIIdPLogic.java
@@ -27,18 +27,16 @@ import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.SAML2SP4UIIdPTO;
 import org.apache.syncope.common.lib.types.ClientExceptionType;
 import org.apache.syncope.common.lib.types.SAML2SP4UIEntitlement;
-import org.apache.syncope.core.logic.init.SAML2SP4UILoader;
 import org.apache.syncope.core.logic.saml2.SAML2ClientCache;
 import org.apache.syncope.core.persistence.api.dao.NotFoundException;
 import org.apache.syncope.core.persistence.api.dao.SAML2SP4UIIdPDAO;
 import org.apache.syncope.core.persistence.api.entity.SAML2SP4UIIdP;
 import org.apache.syncope.core.provisioning.api.data.SAML2SP4UIIdPDataBinder;
+import org.springframework.core.io.support.ResourcePatternResolver;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.transaction.annotation.Transactional;
 
-public class SAML2SP4UIIdPLogic extends 
AbstractTransactionalLogic<SAML2SP4UIIdPTO> {
-
-    protected final SAML2SP4UILoader loader;
+public class SAML2SP4UIIdPLogic extends AbstractSAML2SP4UILogic {
 
     protected final SAML2ClientCache saml2ClientCache;
 
@@ -47,12 +45,13 @@ public class SAML2SP4UIIdPLogic extends 
AbstractTransactionalLogic<SAML2SP4UIIdP
     protected final SAML2SP4UIIdPDAO idpDAO;
 
     public SAML2SP4UIIdPLogic(
-            final SAML2SP4UILoader loader,
+            final SAML2SP4UIProperties props,
+            final ResourcePatternResolver resourceResolver,
             final SAML2ClientCache saml2ClientCache,
             final SAML2SP4UIIdPDataBinder binder,
             final SAML2SP4UIIdPDAO idpDAO) {
 
-        this.loader = loader;
+        super(props, resourceResolver);
         this.saml2ClientCache = saml2ClientCache;
         this.binder = binder;
         this.idpDAO = idpDAO;
@@ -78,7 +77,7 @@ public class SAML2SP4UIIdPLogic extends 
AbstractTransactionalLogic<SAML2SP4UIIdP
     @PreAuthorize("hasRole('" + SAML2SP4UIEntitlement.IDP_IMPORT + "')")
     public String importFromMetadata(final InputStream input) {
         try {
-            SAML2SP4UIIdPTO idpTO = SAML2ClientCache.importMetadata(input, 
loader.newSAML2Configuration());
+            SAML2SP4UIIdPTO idpTO = SAML2ClientCache.importMetadata(input, 
newSAML2Configuration());
             SAML2SP4UIIdP idp = binder.create(idpTO);
 
             return idp.getKey();
diff --git 
a/ext/saml2sp4ui/logic/src/main/java/org/apache/syncope/core/logic/SAML2SP4UILogic.java
 
b/ext/saml2sp4ui/logic/src/main/java/org/apache/syncope/core/logic/SAML2SP4UILogic.java
index ad13b9167c..f0be3c35ce 100644
--- 
a/ext/saml2sp4ui/logic/src/main/java/org/apache/syncope/core/logic/SAML2SP4UILogic.java
+++ 
b/ext/saml2sp4ui/logic/src/main/java/org/apache/syncope/core/logic/SAML2SP4UILogic.java
@@ -46,7 +46,6 @@ import org.apache.syncope.common.lib.types.CipherAlgorithm;
 import org.apache.syncope.common.lib.types.ClientExceptionType;
 import org.apache.syncope.common.lib.types.IdRepoEntitlement;
 import org.apache.syncope.common.lib.types.SAML2BindingType;
-import org.apache.syncope.core.logic.init.SAML2SP4UILoader;
 import org.apache.syncope.core.logic.saml2.NoOpSessionStore;
 import org.apache.syncope.core.logic.saml2.SAML2ClientCache;
 import org.apache.syncope.core.logic.saml2.SAML2SP4UIContext;
@@ -87,10 +86,11 @@ import org.pac4j.saml.profile.SAML2Profile;
 import org.pac4j.saml.redirect.SAML2RedirectionActionBuilder;
 import org.pac4j.saml.sso.impl.SAML2AuthnRequestBuilder;
 import org.springframework.beans.BeanUtils;
+import org.springframework.core.io.support.ResourcePatternResolver;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.util.ResourceUtils;
 
-public class SAML2SP4UILogic extends AbstractTransactionalLogic<EntityTO> {
+public class SAML2SP4UILogic extends AbstractSAML2SP4UILogic {
 
     protected static final String JWT_CLAIM_IDP_ENTITYID = "IDP_ENTITYID";
 
@@ -102,8 +102,6 @@ public class SAML2SP4UILogic extends 
AbstractTransactionalLogic<EntityTO> {
 
     protected static final Encryptor ENCRYPTOR = Encryptor.getInstance();
 
-    protected final SAML2SP4UILoader loader;
-
     protected final AccessTokenDataBinder accessTokenDataBinder;
 
     protected final SAML2ClientCache saml2ClientCache;
@@ -119,14 +117,16 @@ public class SAML2SP4UILogic extends 
AbstractTransactionalLogic<EntityTO> {
     protected final Map<String, RequestedAuthnContextProvider> perContextRACP 
= new ConcurrentHashMap<>();
 
     public SAML2SP4UILogic(
-            final SAML2SP4UILoader loader,
+            final SAML2SP4UIProperties props,
+            final ResourcePatternResolver resourceResolver,
             final AccessTokenDataBinder accessTokenDataBinder,
             final SAML2ClientCache saml2ClientCache,
             final SAML2SP4UIUserManager userManager,
             final SAML2SP4UIIdPDAO idpDAO,
             final AuthDataAccessor authDataAccessor) {
 
-        this.loader = loader;
+        super(props, resourceResolver);
+
         this.accessTokenDataBinder = accessTokenDataBinder;
         this.saml2ClientCache = saml2ClientCache;
         this.userManager = userManager;
@@ -160,7 +160,7 @@ public class SAML2SP4UILogic extends 
AbstractTransactionalLogic<EntityTO> {
     public void getMetadata(final String spEntityID, final String urlContext, 
final OutputStream os) {
         String metadata = metadataCache.get(spEntityID + urlContext);
         if (metadata == null) {
-            SAML2Configuration cfg = loader.newSAML2Configuration();
+            SAML2Configuration cfg = newSAML2Configuration();
             cfg.setServiceProviderEntityId(spEntityID);
             cfg.setCallbackUrl(getCallbackUrl(spEntityID, urlContext));
             
SAML2ClientCache.getSPMetadataPath(spEntityID).ifPresent(cfg::setServiceProviderMetadataResourceFilepath);
@@ -209,7 +209,7 @@ public class SAML2SP4UILogic extends 
AbstractTransactionalLogic<EntityTO> {
     protected SAML2Client getSAML2Client(final SAML2SP4UIIdP idp, final String 
spEntityID, final String urlContext) {
         return saml2ClientCache.get(idp.getEntityID(), spEntityID).
                 orElseGet(() -> saml2ClientCache.add(
-                idp, loader.newSAML2Configuration(), spEntityID, 
getCallbackUrl(spEntityID, urlContext)));
+                idp, newSAML2Configuration(), spEntityID, 
getCallbackUrl(spEntityID, urlContext)));
     }
 
     protected SAML2Client getSAML2Client(final String idpEntityID, final 
String spEntityID, final String urlContext) {
diff --git 
a/ext/saml2sp4ui/logic/src/main/java/org/apache/syncope/core/logic/SAML2SP4UILogicContext.java
 
b/ext/saml2sp4ui/logic/src/main/java/org/apache/syncope/core/logic/SAML2SP4UILogicContext.java
index f2b838ea28..4621cfb0f3 100644
--- 
a/ext/saml2sp4ui/logic/src/main/java/org/apache/syncope/core/logic/SAML2SP4UILogicContext.java
+++ 
b/ext/saml2sp4ui/logic/src/main/java/org/apache/syncope/core/logic/SAML2SP4UILogicContext.java
@@ -50,20 +50,20 @@ public class SAML2SP4UILogicContext {
 
     @ConditionalOnMissingBean
     @Bean
-    public SAML2SP4UILoader saml2SP4UILoader(final ResourcePatternResolver 
resourceResolver,
-            final SAML2SP4UIProperties props) {
-        return new SAML2SP4UILoader(props, resourceResolver);
+    public SAML2SP4UILoader saml2SP4UILoader() {
+        return new SAML2SP4UILoader();
     }
 
     @ConditionalOnMissingBean
     @Bean
     public SAML2SP4UIIdPLogic saml2SP4UIIdPLogic(
-            final SAML2SP4UIIdPDAO idpDAO,
+            final SAML2SP4UIProperties props,
+            final ResourcePatternResolver resourceResolver,
             final SAML2ClientCache saml2ClientCache,
-            final SAML2SP4UILoader loader,
-            final SAML2SP4UIIdPDataBinder binder) {
+            final SAML2SP4UIIdPDataBinder binder,
+            final SAML2SP4UIIdPDAO idpDAO) {
 
-        return new SAML2SP4UIIdPLogic(loader, saml2ClientCache, binder, 
idpDAO);
+        return new SAML2SP4UIIdPLogic(props, resourceResolver, 
saml2ClientCache, binder, idpDAO);
     }
 
     @ConditionalOnMissingBean
@@ -92,15 +92,17 @@ public class SAML2SP4UILogicContext {
     @ConditionalOnMissingBean
     @Bean
     public SAML2SP4UILogic saml2SP4UILogic(
-            final SAML2SP4UIIdPDAO idpDAO,
-            final SAML2ClientCache saml2ClientCache,
-            final SAML2SP4UILoader loader,
+            final SAML2SP4UIProperties props,
+            final ResourcePatternResolver resourceResolver,
             final AccessTokenDataBinder accessTokenDataBinder,
+            final SAML2ClientCache saml2ClientCache,
             final SAML2SP4UIUserManager userManager,
+            final SAML2SP4UIIdPDAO idpDAO,
             final AuthDataAccessor authDataAccessor) {
 
         return new SAML2SP4UILogic(
-                loader,
+                props,
+                resourceResolver,
                 accessTokenDataBinder,
                 saml2ClientCache,
                 userManager,
diff --git 
a/ext/saml2sp4ui/logic/src/main/java/org/apache/syncope/core/logic/init/SAML2SP4UILoader.java
 
b/ext/saml2sp4ui/logic/src/main/java/org/apache/syncope/core/logic/init/SAML2SP4UILoader.java
index f1aa3748c0..e9f082dad8 100644
--- 
a/ext/saml2sp4ui/logic/src/main/java/org/apache/syncope/core/logic/init/SAML2SP4UILoader.java
+++ 
b/ext/saml2sp4ui/logic/src/main/java/org/apache/syncope/core/logic/init/SAML2SP4UILoader.java
@@ -18,36 +18,18 @@
  */
 package org.apache.syncope.core.logic.init;
 
-import java.io.InputStream;
-import java.security.KeyStore;
-import java.security.PrivateKey;
-import java.security.cert.X509Certificate;
 import org.apache.syncope.common.lib.types.EntitlementsHolder;
 import org.apache.syncope.common.lib.types.ImplementationTypesHolder;
 import org.apache.syncope.common.lib.types.SAML2SP4UIEntitlement;
 import org.apache.syncope.common.lib.types.SAML2SP4UIImplementationType;
-import org.apache.syncope.core.logic.SAML2SP4UIProperties;
-import org.apache.syncope.core.logic.saml2.NoOpLogoutHandler;
 import org.apache.syncope.core.persistence.api.SyncopeCoreLoader;
-import org.pac4j.saml.config.SAML2Configuration;
-import org.pac4j.saml.metadata.keystore.BaseSAML2KeystoreGenerator;
-import org.springframework.core.io.FileUrlResource;
-import org.springframework.core.io.support.ResourcePatternResolver;
+import org.springframework.core.Ordered;
 
 public class SAML2SP4UILoader implements SyncopeCoreLoader {
 
-    protected final SAML2SP4UIProperties props;
-
-    protected final ResourcePatternResolver resourceResolver;
-
-    public SAML2SP4UILoader(final SAML2SP4UIProperties props, final 
ResourcePatternResolver resourceResolver) {
-        this.props = props;
-        this.resourceResolver = resourceResolver;
-    }
-
     @Override
     public int getOrder() {
-        return 1000;
+        return Ordered.HIGHEST_PRECEDENCE;
     }
 
     @Override
@@ -55,40 +37,4 @@ public class SAML2SP4UILoader implements SyncopeCoreLoader {
         
EntitlementsHolder.getInstance().addAll(SAML2SP4UIEntitlement.values());
         
ImplementationTypesHolder.getInstance().putAll(SAML2SP4UIImplementationType.values());
     }
-
-    public SAML2Configuration newSAML2Configuration() {
-        SAML2Configuration cfg = new SAML2Configuration(
-                resourceResolver.getResource(props.getKeystore()),
-                props.getKeystoreStorepass(),
-                props.getKeystoreKeypass(),
-                null);
-
-        cfg.setKeystoreType(props.getKeystoreType());
-        if (cfg.getKeystoreResource() instanceof FileUrlResource) {
-            cfg.setKeystoreGenerator(new BaseSAML2KeystoreGenerator(cfg) {
-
-                @Override
-                protected void store(
-                        final KeyStore ks,
-                        final X509Certificate certificate,
-                        final PrivateKey privateKey) throws Exception {
-
-                    // nothing to do
-                }
-
-                @Override
-                public InputStream retrieve() throws Exception {
-                    return cfg.getKeystoreResource().getInputStream();
-                }
-            });
-        }
-
-        cfg.setWantsAssertionsSigned(true);
-        cfg.setAuthnRequestSigned(true);
-        cfg.setSpLogoutRequestSigned(true);
-        cfg.setAcceptedSkew(props.getSkew());
-        cfg.setLogoutHandler(new NoOpLogoutHandler());
-
-        return cfg;
-    }
 }

Reply via email to