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;
- }
}