From b40fb77aaea5985e999a53586765d85288a47420 Mon Sep 17 00:00:00 2001 From: thisarawelmilla Date: Mon, 16 Sep 2024 23:22:46 +0530 Subject: [PATCH 1/9] Add new DefinedBy property to authenticator config. --- .../ApplicationAuthenticatorService.java | 11 ++++++ .../model/FederatedAuthenticatorConfig.java | 35 +++++++++++++++++++ .../common/model/IdentityProvider.java | 8 +++++ .../model/LocalAuthenticatorConfig.java | 33 +++++++++++++++++ .../mgt/dao/impl/ApplicationDAOImpl.java | 15 +++++++- .../framework/ApplicationAuthenticator.java | 10 ++++++ .../internal/FrameworkServiceComponent.java | 4 +++ .../identity/base/IdentityConstants.java | 9 +++++ .../idp/mgt/IdentityProviderManager.java | 3 ++ .../carbon/idp/mgt/dao/IdPManagementDAO.java | 14 ++++++++ ...IdentityProviderManagementServiceTest.java | 8 +++++ .../idp/mgt/dao/CacheBackedIdPMgtDAOTest.java | 5 +++ .../idp/mgt/dao/IdPManagementDAOTest.java | 6 ++++ 13 files changed, 160 insertions(+), 1 deletion(-) diff --git a/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/ApplicationAuthenticatorService.java b/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/ApplicationAuthenticatorService.java index e93a82f42b75..f5975c3af40f 100644 --- a/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/ApplicationAuthenticatorService.java +++ b/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/ApplicationAuthenticatorService.java @@ -18,6 +18,8 @@ package org.wso2.carbon.identity.application.common; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.wso2.carbon.identity.application.common.model.FederatedAuthenticatorConfig; import org.wso2.carbon.identity.application.common.model.LocalAuthenticatorConfig; import org.wso2.carbon.identity.application.common.model.RequestPathAuthenticatorConfig; @@ -31,6 +33,7 @@ public class ApplicationAuthenticatorService { private static volatile ApplicationAuthenticatorService instance; + private static final Log LOG = LogFactory.getLog(ApplicationAuthenticatorService.class); private List localAuthenticators = new ArrayList<>(); private List federatedAuthenticators = new ArrayList<>(); @@ -88,6 +91,10 @@ public RequestPathAuthenticatorConfig getRequestPathAuthenticatorByName(String n public void addLocalAuthenticator(LocalAuthenticatorConfig authenticator) { if (authenticator != null) { + //TODO: Remove warn log, once feature is ready. + if (authenticator.getDefinedByType() == null) { + LOG.warn("The defined by type is not set for the : " + authenticator.getName()); + } localAuthenticators.add(authenticator); } } @@ -100,6 +107,10 @@ public void removeLocalAuthenticator(LocalAuthenticatorConfig authenticator) { public void addFederatedAuthenticator(FederatedAuthenticatorConfig authenticator) { if (authenticator != null) { + //TODO: Remove warn log, once feature is ready. + if (authenticator.getDefinedByType() == null) { + LOG.warn("The defined by type is not set for the : " + authenticator.getName()); + } federatedAuthenticators.add(authenticator); } } diff --git a/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/FederatedAuthenticatorConfig.java b/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/FederatedAuthenticatorConfig.java index 40ad2fb904b5..fa22596f1e8a 100644 --- a/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/FederatedAuthenticatorConfig.java +++ b/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/FederatedAuthenticatorConfig.java @@ -22,6 +22,9 @@ import org.apache.axiom.om.OMElement; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.wso2.carbon.identity.base.IdentityConstants; import java.io.Serializable; import java.util.ArrayList; @@ -46,6 +49,7 @@ public class FederatedAuthenticatorConfig implements Serializable { private static final long serialVersionUID = -2361107623257323257L; + private static final Logger LOG = LoggerFactory.getLogger(LocalAuthenticatorConfig.class); @XmlElement(name = "Name") protected String name; @@ -63,6 +67,9 @@ public class FederatedAuthenticatorConfig implements Serializable { @XmlElement(name = "Tags") protected String[] tags; + @XmlElement(name = "DefinedBy") + protected IdentityConstants.DefinedByType definedByType; + public static FederatedAuthenticatorConfig build(OMElement federatedAuthenticatorConfigOM) { if (federatedAuthenticatorConfigOM == null) { @@ -101,9 +108,17 @@ public static FederatedAuthenticatorConfig build(OMElement federatedAuthenticato Property[] propertiesArr = propertiesArrList.toArray(new Property[propertiesArrList.size()]); federatedAuthenticatorConfig.setProperties(propertiesArr); } + } else if ("DefinedBy".equals(elementName)) { + federatedAuthenticatorConfig.setDefinedByType( + IdentityConstants.DefinedByType.valueOf(element.getText())); } } + // TODO: Remove warn log, once feature is ready. + if (federatedAuthenticatorConfig.getDefinedByType() == null) { + LOG.warn("The defined by type is not set for the : " + federatedAuthenticatorConfig.getName()); + } + return federatedAuthenticatorConfig; } @@ -230,4 +245,24 @@ public void setTags(String[] tagList) { tags = tagList; } + + /** + * Get the tag list of the Local authenticator. + * + * @return String[] + */ + public IdentityConstants.DefinedByType getDefinedByType() { + + return definedByType; + } + + /** + * Set the tag list for Local authenticator config. + * + * @param type authenticator. + */ + public void setDefinedByType(IdentityConstants.DefinedByType type) { + + definedByType = type; + } } diff --git a/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/IdentityProvider.java b/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/IdentityProvider.java index 5c55a44624ba..9d5a4a691bbe 100644 --- a/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/IdentityProvider.java +++ b/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/IdentityProvider.java @@ -58,6 +58,7 @@ public class IdentityProvider implements Serializable { private static final long serialVersionUID = 2199048941051702943L; + private static final Log LOG = LogFactory.getLog(IdentityProvider.class); private static final Log log = LogFactory.getLog(IdentityProvider.class); private static final String FILE_ELEMENT_IDENTITY_PROVIDER_NAME = "IdentityProviderName"; @@ -419,6 +420,13 @@ public void setFederatedAuthenticatorConfigs( if (federatedAuthenticatorConfigs == null) { return; } + + // TODO: Remove warn log, once feature is ready. + for (FederatedAuthenticatorConfig config: federatedAuthenticatorConfigs) { + if (config.getDefinedByType() == null) { + LOG.warn("The defined by type is not set for the : " + config.getName()); + } + } Set propertySet = new HashSet(Arrays.asList(federatedAuthenticatorConfigs)); this.federatedAuthenticatorConfigs = propertySet.toArray(new FederatedAuthenticatorConfig[propertySet.size()]); diff --git a/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/LocalAuthenticatorConfig.java b/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/LocalAuthenticatorConfig.java index cfe369a544e3..58f528d1ec26 100644 --- a/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/LocalAuthenticatorConfig.java +++ b/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/LocalAuthenticatorConfig.java @@ -22,6 +22,8 @@ import org.apache.axiom.om.OMElement; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.wso2.carbon.identity.base.IdentityConstants; import java.io.Serializable; @@ -46,6 +48,7 @@ public class LocalAuthenticatorConfig implements Serializable { private static final long serialVersionUID = 3363298518257599291L; + private static final Logger LOG = LoggerFactory.getLogger(LocalAuthenticatorConfig.class); @XmlElement(name = "Name") protected String name; @@ -63,6 +66,9 @@ public class LocalAuthenticatorConfig implements Serializable { @XmlElement(name = "Tags") protected String[] tags; + @XmlElement(name = "DefinedBy") + protected IdentityConstants.DefinedByType definedByType; + /* * * @@ -111,8 +117,15 @@ public static LocalAuthenticatorConfig build(OMElement localAuthenticatorConfigO Property[] propertiesArr = propertiesArrList.toArray(new Property[0]); localAuthenticatorConfig.setProperties(propertiesArr); } + } else if ("DefinedBy".equals(member.getLocalName())) { + localAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.valueOf(member.getText())); } } + + if (localAuthenticatorConfig.getDefinedByType() == null) { + LOG.warn("The defined by type is not set for the : " + localAuthenticatorConfig.getName()); + } + return localAuthenticatorConfig; } @@ -224,4 +237,24 @@ public void setTags(String[] tagList) { tags = tagList; } + + /** + * Get the tag list of the Local authenticator. + * + * @return String[] + */ + public IdentityConstants.DefinedByType getDefinedByType() { + + return definedByType; + } + + /** + * Set the tag list for Local authenticator config. + * + * @param type authenticator. + */ + public void setDefinedByType(IdentityConstants.DefinedByType type) { + + definedByType = type; + } } diff --git a/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/main/java/org/wso2/carbon/identity/application/mgt/dao/impl/ApplicationDAOImpl.java b/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/main/java/org/wso2/carbon/identity/application/mgt/dao/impl/ApplicationDAOImpl.java index 745068863338..48192a9b974a 100644 --- a/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/main/java/org/wso2/carbon/identity/application/mgt/dao/impl/ApplicationDAOImpl.java +++ b/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/main/java/org/wso2/carbon/identity/application/mgt/dao/impl/ApplicationDAOImpl.java @@ -77,6 +77,7 @@ import org.wso2.carbon.identity.application.mgt.dao.PaginatableFilterableApplicationDAO; import org.wso2.carbon.identity.application.mgt.internal.ApplicationManagementServiceComponent; import org.wso2.carbon.identity.application.mgt.internal.ApplicationManagementServiceComponentHolder; +import org.wso2.carbon.identity.base.IdentityConstants; import org.wso2.carbon.identity.base.IdentityException; import org.wso2.carbon.identity.base.IdentityRuntimeException; import org.wso2.carbon.identity.core.CertificateRetrievingException; @@ -1566,6 +1567,15 @@ private void updateLocalAndOutboundAuthenticationConfiguration(int applicationId ApplicationConstants.LOCAL_IDP_NAME, lclAuthenticator.getName(), lclAuthenticator.getDisplayName()); + } else { + if (lclAuthenticator.getDefinedByType() == null) { + log.warn("Authenticator already exists. Updating the authenticator, but the " + + "defined by type is not set."); + } else { + log.debug("Authenticator already exists. Updating the authenticator.The defined " + + "by type is set to: " + lclAuthenticator.getDefinedByType().toString()); + //TODO: Update database with defined by properties for local authenticators. + } } if (authenticatorId > 0) { // ID, TENANT_ID, AUTHENTICATOR_ID @@ -3088,6 +3098,7 @@ private LocalAndOutboundAuthenticationConfig getLocalAndOutboundAuthenticationCo .get(ApplicationConstants.IDP_AUTHENTICATOR_NAME)); localAuthenticator.setDisplayName(authenticatorInfo .get(ApplicationConstants.IDP_AUTHENTICATOR_DISPLAY_NAME)); + localAuthenticator.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); stepLocalAuth.get(step).add(localAuthenticator); } else { Map> stepFedIdps = stepFedIdPAuthenticators @@ -3106,6 +3117,7 @@ private LocalAndOutboundAuthenticationConfig getLocalAndOutboundAuthenticationCo .get(ApplicationConstants.IDP_AUTHENTICATOR_NAME)); fedAuthenticator.setDisplayName(authenticatorInfo .get(ApplicationConstants.IDP_AUTHENTICATOR_DISPLAY_NAME)); + fedAuthenticator.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); idpAuths.add(fedAuthenticator); } @@ -5038,7 +5050,7 @@ private int addAuthenticator(Connection conn, int tenantId, String idpName, int authenticatorId = -1; PreparedStatement prepStmt = null; ResultSet rs = null; - // TENANT_ID, IDP_ID, NAME,IS_ENABLED, DISPLAY_NAME + // TENANT_ID, IDP_ID, NAME,IS_ENABLED, DISPLAY_NAME, DEFINED_BY String sqlStmt = ApplicationMgtDBQueries.STORE_LOCAL_AUTHENTICATOR; try { String dbProductName = conn.getMetaData().getDatabaseProductName(); @@ -5050,6 +5062,7 @@ private int addAuthenticator(Connection conn, int tenantId, String idpName, prepStmt.setString(4, authenticatorName); prepStmt.setString(5, "1"); prepStmt.setString(6, authenticatorDispalyName); + //TODO: prepStmt.setString(7, IdentityConstants.DefinedByType.SYSTEM.toString()); prepStmt.execute(); rs = prepStmt.getGeneratedKeys(); if (rs.next()) { diff --git a/components/authentication-framework/org.wso2.carbon.identity.application.authentication.framework/src/main/java/org/wso2/carbon/identity/application/authentication/framework/ApplicationAuthenticator.java b/components/authentication-framework/org.wso2.carbon.identity.application.authentication.framework/src/main/java/org/wso2/carbon/identity/application/authentication/framework/ApplicationAuthenticator.java index 6c974a31d83b..c9756c44a120 100644 --- a/components/authentication-framework/org.wso2.carbon.identity.application.authentication.framework/src/main/java/org/wso2/carbon/identity/application/authentication/framework/ApplicationAuthenticator.java +++ b/components/authentication-framework/org.wso2.carbon.identity.application.authentication.framework/src/main/java/org/wso2/carbon/identity/application/authentication/framework/ApplicationAuthenticator.java @@ -24,6 +24,7 @@ import org.wso2.carbon.identity.application.authentication.framework.exception.LogoutFailedException; import org.wso2.carbon.identity.application.authentication.framework.model.AuthenticatorData; import org.wso2.carbon.identity.application.common.model.Property; +import org.wso2.carbon.identity.base.IdentityConstants; import java.io.Serializable; import java.util.List; @@ -171,4 +172,13 @@ default String getI18nKey() { return StringUtils.EMPTY; } + /** + * Get the authenticator type. Default value will be SYSTEM. + * + * @return Authenticator Type. + */ + default IdentityConstants.DefinedByType getDefinedByType() { + + return IdentityConstants.DefinedByType.SYSTEM; + } } diff --git a/components/authentication-framework/org.wso2.carbon.identity.application.authentication.framework/src/main/java/org/wso2/carbon/identity/application/authentication/framework/internal/FrameworkServiceComponent.java b/components/authentication-framework/org.wso2.carbon.identity.application.authentication.framework/src/main/java/org/wso2/carbon/identity/application/authentication/framework/internal/FrameworkServiceComponent.java index c781132f5f08..e07d52a59813 100644 --- a/components/authentication-framework/org.wso2.carbon.identity.application.authentication.framework/src/main/java/org/wso2/carbon/identity/application/authentication/framework/internal/FrameworkServiceComponent.java +++ b/components/authentication-framework/org.wso2.carbon.identity.application.authentication.framework/src/main/java/org/wso2/carbon/identity/application/authentication/framework/internal/FrameworkServiceComponent.java @@ -99,6 +99,7 @@ import org.wso2.carbon.identity.application.common.model.Property; import org.wso2.carbon.identity.application.common.model.RequestPathAuthenticatorConfig; import org.wso2.carbon.identity.application.mgt.ApplicationManagementService; +import org.wso2.carbon.identity.base.IdentityConstants; import org.wso2.carbon.identity.claim.metadata.mgt.ClaimMetadataManagementService; import org.wso2.carbon.identity.configuration.mgt.core.ConfigurationManager; import org.wso2.carbon.identity.core.handler.HandlerComparator; @@ -506,6 +507,7 @@ protected void setAuthenticator(ApplicationAuthenticator authenticator) { localAuthenticatorConfig.setProperties(configProperties); localAuthenticatorConfig.setDisplayName(authenticator.getFriendlyName()); localAuthenticatorConfig.setTags(getTags(authenticator)); + localAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); AuthenticatorConfig fileBasedConfig = getAuthenticatorConfig(authenticator.getName()); localAuthenticatorConfig.setEnabled(fileBasedConfig.isEnabled()); ApplicationAuthenticatorService.getInstance().addLocalAuthenticator(localAuthenticatorConfig); @@ -515,6 +517,7 @@ protected void setAuthenticator(ApplicationAuthenticator authenticator) { federatedAuthenticatorConfig.setProperties(configProperties); federatedAuthenticatorConfig.setDisplayName(authenticator.getFriendlyName()); federatedAuthenticatorConfig.setTags(getTags(authenticator)); + federatedAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); ApplicationAuthenticatorService.getInstance().addFederatedAuthenticator(federatedAuthenticatorConfig); } else if (authenticator instanceof RequestPathApplicationAuthenticator) { RequestPathAuthenticatorConfig reqPathAuthenticatorConfig = new RequestPathAuthenticatorConfig(); @@ -524,6 +527,7 @@ protected void setAuthenticator(ApplicationAuthenticator authenticator) { reqPathAuthenticatorConfig.setTags(getTags(authenticator)); AuthenticatorConfig fileBasedConfig = getAuthenticatorConfig(authenticator.getName()); reqPathAuthenticatorConfig.setEnabled(fileBasedConfig.isEnabled()); + reqPathAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); ApplicationAuthenticatorService.getInstance().addRequestPathAuthenticator(reqPathAuthenticatorConfig); } diff --git a/components/identity-core/org.wso2.carbon.identity.base/src/main/java/org/wso2/carbon/identity/base/IdentityConstants.java b/components/identity-core/org.wso2.carbon.identity.base/src/main/java/org/wso2/carbon/identity/base/IdentityConstants.java index a5b96babf759..c2a3cbdbe557 100644 --- a/components/identity-core/org.wso2.carbon.identity.base/src/main/java/org/wso2/carbon/identity/base/IdentityConstants.java +++ b/components/identity-core/org.wso2.carbon.identity.base/src/main/java/org/wso2/carbon/identity/base/IdentityConstants.java @@ -619,4 +619,13 @@ public static class APIResponse { public static final String SET_ACCOUNT_LOCK_AUTH_FAILURE_REASON = "APIResponse.SetAccountLockAuthFailureReason"; } + + /** + * The Authentication Type - SYSTEM: system define authenticator, CUSTOM: user defined authentication extension. + */ + public enum DefinedByType { + + SYSTEM, + USER + } } diff --git a/components/idp-mgt/org.wso2.carbon.idp.mgt/src/main/java/org/wso2/carbon/idp/mgt/IdentityProviderManager.java b/components/idp-mgt/org.wso2.carbon.idp.mgt/src/main/java/org/wso2/carbon/idp/mgt/IdentityProviderManager.java index c383da9a34ff..a28c1db25115 100644 --- a/components/idp-mgt/org.wso2.carbon.idp.mgt/src/main/java/org/wso2/carbon/idp/mgt/IdentityProviderManager.java +++ b/components/idp-mgt/org.wso2.carbon.idp.mgt/src/main/java/org/wso2/carbon/idp/mgt/IdentityProviderManager.java @@ -171,6 +171,7 @@ public void addResidentIdP(IdentityProvider identityProvider, String tenantDomai if (saml2SSOResidentAuthenticatorConfig == null) { saml2SSOResidentAuthenticatorConfig = new FederatedAuthenticatorConfig(); saml2SSOResidentAuthenticatorConfig.setName(IdentityApplicationConstants.Authenticator.SAML2SSO.NAME); + saml2SSOResidentAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); } if (saml2SSOResidentAuthenticatorConfig.getProperties() == null) { saml2SSOResidentAuthenticatorConfig.setProperties(new Property[0]); @@ -255,6 +256,7 @@ public void addResidentIdP(IdentityProvider identityProvider, String tenantDomai FederatedAuthenticatorConfig oidcAuthenticationConfig = new FederatedAuthenticatorConfig(); oidcAuthenticationConfig.setProperties(new Property[]{oidcProperty}); oidcAuthenticationConfig.setName(IdentityApplicationConstants.Authenticator.OIDC.NAME); + oidcAuthenticationConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); Property passiveStsProperty = new Property(); passiveStsProperty.setName(IdentityApplicationConstants.Authenticator.PassiveSTS.IDENTITY_PROVIDER_ENTITY_ID); @@ -263,6 +265,7 @@ public void addResidentIdP(IdentityProvider identityProvider, String tenantDomai FederatedAuthenticatorConfig passiveStsAuthenticationConfig = new FederatedAuthenticatorConfig(); passiveStsAuthenticationConfig.setProperties(new Property[]{passiveStsProperty}); passiveStsAuthenticationConfig.setName(IdentityApplicationConstants.Authenticator.PassiveSTS.NAME); + passiveStsAuthenticationConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); FederatedAuthenticatorConfig[] federatedAuthenticatorConfigs = {saml2SSOResidentAuthenticatorConfig, passiveStsAuthenticationConfig, oidcAuthenticationConfig}; diff --git a/components/idp-mgt/org.wso2.carbon.idp.mgt/src/main/java/org/wso2/carbon/idp/mgt/dao/IdPManagementDAO.java b/components/idp-mgt/org.wso2.carbon.idp.mgt/src/main/java/org/wso2/carbon/idp/mgt/dao/IdPManagementDAO.java index 3c382c249765..15c492891b08 100644 --- a/components/idp-mgt/org.wso2.carbon.idp.mgt/src/main/java/org/wso2/carbon/idp/mgt/dao/IdPManagementDAO.java +++ b/components/idp-mgt/org.wso2.carbon.idp.mgt/src/main/java/org/wso2/carbon/idp/mgt/dao/IdPManagementDAO.java @@ -1148,6 +1148,8 @@ private FederatedAuthenticatorConfig[] getFederatedAuthenticatorConfigs( } authnConfig.setDisplayName(rs.getString("DISPLAY_NAME")); + // TODO: Read from database and set the DefinedBy property to the authenticator. + authnConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); if (defaultAuthName != null && authnConfig.getName().equals(defaultAuthName)) { federatedIdp.getDefaultAuthenticatorConfig().setDisplayName(authnConfig.getDisplayName()); @@ -1424,6 +1426,7 @@ public void addFederatedAuthenticatorConfig(FederatedAuthenticatorConfig authnCo } prepStmt1.setString(4, authnConfig.getName()); prepStmt1.setString(5, authnConfig.getDisplayName()); + //TODO: prepStmt1.setString(6, authnConfig.getDefinedByType().toString()); prepStmt1.execute(); int authnId = getAuthenticatorIdentifier(dbConnection, idpId, authnConfig.getName()); @@ -2330,6 +2333,7 @@ private FederatedAuthenticatorConfig buildSAMLProperties(IdentityProvider identi if (samlFederatedAuthConfig == null) { samlFederatedAuthConfig = new FederatedAuthenticatorConfig(); samlFederatedAuthConfig.setName(IdentityApplicationConstants.Authenticator.SAML2SSO.NAME); + samlFederatedAuthConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); } List propertiesList = new ArrayList<>(); @@ -2713,6 +2717,7 @@ private void fillResidentIdpProperties(IdentityProvider identityProvider, String if (openIdFedAuthn == null) { openIdFedAuthn = new FederatedAuthenticatorConfig(); openIdFedAuthn.setName(IdentityApplicationConstants.Authenticator.OpenID.NAME); + openIdFedAuthn.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); } propertiesList = new ArrayList<>(Arrays.asList(openIdFedAuthn.getProperties())); if (IdentityApplicationManagementUtil.getProperty(openIdFedAuthn.getProperties(), @@ -2735,6 +2740,7 @@ private void fillResidentIdpProperties(IdentityProvider identityProvider, String if (oauth1FedAuthn == null) { oauth1FedAuthn = new FederatedAuthenticatorConfig(); oauth1FedAuthn.setName(IdentityApplicationConstants.OAuth10A.NAME); + oauth1FedAuthn.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); } propertiesList = new ArrayList<>(Arrays.asList(oauth1FedAuthn.getProperties())); if (IdentityApplicationManagementUtil.getProperty(oauth1FedAuthn.getProperties(), @@ -2770,6 +2776,7 @@ private void fillResidentIdpProperties(IdentityProvider identityProvider, String if (oidcFedAuthn == null) { oidcFedAuthn = new FederatedAuthenticatorConfig(); oidcFedAuthn.setName(IdentityApplicationConstants.Authenticator.OIDC.NAME); + oidcFedAuthn.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); } propertiesList = new ArrayList<>(); @@ -2841,6 +2848,7 @@ private void fillResidentIdpProperties(IdentityProvider identityProvider, String if (passiveSTSFedAuthn == null) { passiveSTSFedAuthn = new FederatedAuthenticatorConfig(); passiveSTSFedAuthn.setName(IdentityApplicationConstants.Authenticator.PassiveSTS.NAME); + passiveSTSFedAuthn.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); } propertiesList = new ArrayList<>(); @@ -2880,6 +2888,7 @@ private void fillResidentIdpProperties(IdentityProvider identityProvider, String if (stsFedAuthn == null) { stsFedAuthn = new FederatedAuthenticatorConfig(); stsFedAuthn.setName(IdentityApplicationConstants.Authenticator.WSTrust.NAME); + stsFedAuthn.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); } propertiesList = new ArrayList<>(Arrays.asList(stsFedAuthn.getProperties())); if (IdentityApplicationManagementUtil.getProperty(stsFedAuthn.getProperties(), @@ -2894,6 +2903,7 @@ private void fillResidentIdpProperties(IdentityProvider identityProvider, String FederatedAuthenticatorConfig sessionTimeoutConfig = new FederatedAuthenticatorConfig(); sessionTimeoutConfig.setName(IdentityApplicationConstants.NAME); + sessionTimeoutConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); propertiesList = new ArrayList<>(Arrays.asList(sessionTimeoutConfig.getProperties())); @@ -3443,6 +3453,8 @@ public IdentityProvider getIdPByAuthenticatorPropertyValue(Connection dbConnecti if (defaultAuthenticatorName != null) { FederatedAuthenticatorConfig defaultAuthenticator = new FederatedAuthenticatorConfig(); defaultAuthenticator.setName(defaultAuthenticatorName); + // TODO: Check the authenticator type and set the DefinedBy property accordingly. + defaultAuthenticator.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); federatedIdp.setDefaultAuthenticatorConfig(defaultAuthenticator); } @@ -3606,6 +3618,8 @@ public IdentityProvider getIdPByAuthenticatorPropertyValue(Connection dbConnecti if (defaultAuthenticatorName != null) { FederatedAuthenticatorConfig defaultAuthenticator = new FederatedAuthenticatorConfig(); defaultAuthenticator.setName(defaultAuthenticatorName); + // TODO: Check the authenticator type and set the DefinedBy property accordingly. + defaultAuthenticator.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); federatedIdp.setDefaultAuthenticatorConfig(defaultAuthenticator); } diff --git a/components/idp-mgt/org.wso2.carbon.idp.mgt/src/test/java/org/wso2/carbon/idp/mgt/IdentityProviderManagementServiceTest.java b/components/idp-mgt/org.wso2.carbon.idp.mgt/src/test/java/org/wso2/carbon/idp/mgt/IdentityProviderManagementServiceTest.java index a9c3a7926b21..d54c396949f9 100644 --- a/components/idp-mgt/org.wso2.carbon.idp.mgt/src/test/java/org/wso2/carbon/idp/mgt/IdentityProviderManagementServiceTest.java +++ b/components/idp-mgt/org.wso2.carbon.idp.mgt/src/test/java/org/wso2/carbon/idp/mgt/IdentityProviderManagementServiceTest.java @@ -37,6 +37,7 @@ import org.wso2.carbon.identity.application.common.model.ProvisioningConnectorConfig; import org.wso2.carbon.identity.application.common.model.RoleMapping; import org.wso2.carbon.identity.application.common.util.IdentityApplicationConstants; +import org.wso2.carbon.identity.base.IdentityConstants; import org.wso2.carbon.identity.claim.metadata.mgt.ClaimMetadataManagementServiceImpl; import org.wso2.carbon.identity.claim.metadata.mgt.exception.ClaimMetadataException; import org.wso2.carbon.identity.claim.metadata.mgt.model.LocalClaim; @@ -132,6 +133,7 @@ public Object[][] addIdPData() { federatedAuthenticatorConfig.setDisplayName("DisplayName1"); federatedAuthenticatorConfig.setName("Name"); federatedAuthenticatorConfig.setEnabled(true); + federatedAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); Property property1 = new Property(); property1.setName("Property1"); property1.setValue("value1"); @@ -557,6 +559,7 @@ public Object[][] updateIdPData() { newFederatedAuthenticatorConfig.setDisplayName("DisplayName1New"); newFederatedAuthenticatorConfig.setName("Name"); newFederatedAuthenticatorConfig.setEnabled(true); + newFederatedAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); Property newProperty1 = new Property(); newProperty1.setName("Property1New"); newProperty1.setValue("value1New"); @@ -796,6 +799,7 @@ public Object[][] updateResidentIdPData() { facNew.setDisplayName("DisplayName1New"); facNew.setName("Name"); facNew.setEnabled(true); + facNew.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); idp2New.setFederatedAuthenticatorConfigs(new FederatedAuthenticatorConfig[]{facNew}); // Initialize New Resident Identity Provider 3. @@ -893,6 +897,7 @@ public void testGetResidentIDPMetadata() throws Exception { facNew.setDisplayName("SAML2SSO"); facNew.setName("saml2sso"); facNew.setEnabled(true); + facNew.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); newIdp.setFederatedAuthenticatorConfigs(new FederatedAuthenticatorConfig[]{facNew}); identityProviderManagementService.updateResidentIdP((IdentityProvider) newIdp); @@ -915,6 +920,7 @@ public void testGetResidentIDPMetadataException() throws Exception { facNew.setDisplayName("SAML2SSO"); facNew.setName("saml2sso"); facNew.setEnabled(true); + facNew.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); newIdp.setFederatedAuthenticatorConfigs(new FederatedAuthenticatorConfig[]{facNew}); identityProviderManagementService.updateResidentIdP((IdentityProvider) newIdp); @@ -950,6 +956,7 @@ private void addTestIdps() throws IdentityProviderManagementException { federatedAuthenticatorConfig.setDisplayName("DisplayName1"); federatedAuthenticatorConfig.setName("Name"); federatedAuthenticatorConfig.setEnabled(true); + federatedAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); Property property1 = new Property(); property1.setName("Property1"); property1.setValue("value1"); @@ -1103,6 +1110,7 @@ private IdentityProvider addIdPDataWithSameIdpEntityId(String idpName) { federatedAuthenticatorConfig.setDisplayName("DisplayName"); federatedAuthenticatorConfig.setName("SAMLSSOAuthenticator"); federatedAuthenticatorConfig.setEnabled(true); + federatedAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); Property property1 = new Property(); property1.setName("SPEntityId"); property1.setValue("wso2-is"); diff --git a/components/idp-mgt/org.wso2.carbon.idp.mgt/src/test/java/org/wso2/carbon/idp/mgt/dao/CacheBackedIdPMgtDAOTest.java b/components/idp-mgt/org.wso2.carbon.idp.mgt/src/test/java/org/wso2/carbon/idp/mgt/dao/CacheBackedIdPMgtDAOTest.java index 853052a55842..1d00094a3b1a 100644 --- a/components/idp-mgt/org.wso2.carbon.idp.mgt/src/test/java/org/wso2/carbon/idp/mgt/dao/CacheBackedIdPMgtDAOTest.java +++ b/components/idp-mgt/org.wso2.carbon.idp.mgt/src/test/java/org/wso2/carbon/idp/mgt/dao/CacheBackedIdPMgtDAOTest.java @@ -39,6 +39,7 @@ import org.wso2.carbon.identity.application.common.model.Property; import org.wso2.carbon.identity.application.common.model.ProvisioningConnectorConfig; import org.wso2.carbon.identity.application.common.model.RoleMapping; +import org.wso2.carbon.identity.base.IdentityConstants; import org.wso2.carbon.identity.core.model.ExpressionNode; import org.wso2.carbon.identity.core.util.IdentityDatabaseUtil; import org.wso2.carbon.identity.core.util.IdentityTenantUtil; @@ -742,6 +743,7 @@ public Object[][] addIdPData() { federatedAuthenticatorConfig.setDisplayName("DisplayName1"); federatedAuthenticatorConfig.setName("Name"); federatedAuthenticatorConfig.setEnabled(true); + federatedAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); Property property1 = new Property(); property1.setName("Property1"); property1.setValue("value1"); @@ -845,6 +847,7 @@ public Object[][] updateIdPData() { federatedAuthenticatorConfig.setDisplayName("DisplayName1"); federatedAuthenticatorConfig.setName("Name"); federatedAuthenticatorConfig.setEnabled(true); + federatedAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); Property property1 = new Property(); property1.setName("Property1"); property1.setValue("value1"); @@ -902,6 +905,7 @@ public Object[][] updateIdPData() { newFederatedAuthenticatorConfig.setDisplayName("DisplayName1New"); newFederatedAuthenticatorConfig.setName("Name"); newFederatedAuthenticatorConfig.setEnabled(true); + newFederatedAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); Property property1New = new Property(); property1New.setName("Property1New"); property1New.setValue("value1New"); @@ -1449,6 +1453,7 @@ private void addTestIdps() throws IdentityProviderManagementException { FederatedAuthenticatorConfig federatedAuthenticatorConfig = new FederatedAuthenticatorConfig(); federatedAuthenticatorConfig.setDisplayName("DisplayName1"); federatedAuthenticatorConfig.setName("Name"); + federatedAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); federatedAuthenticatorConfig.setEnabled(true); Property property1 = new Property(); property1.setName("Property1"); diff --git a/components/idp-mgt/org.wso2.carbon.idp.mgt/src/test/java/org/wso2/carbon/idp/mgt/dao/IdPManagementDAOTest.java b/components/idp-mgt/org.wso2.carbon.idp.mgt/src/test/java/org/wso2/carbon/idp/mgt/dao/IdPManagementDAOTest.java index e7b93e916790..f196b9a35447 100644 --- a/components/idp-mgt/org.wso2.carbon.idp.mgt/src/test/java/org/wso2/carbon/idp/mgt/dao/IdPManagementDAOTest.java +++ b/components/idp-mgt/org.wso2.carbon.idp.mgt/src/test/java/org/wso2/carbon/idp/mgt/dao/IdPManagementDAOTest.java @@ -40,6 +40,7 @@ import org.wso2.carbon.identity.application.common.model.Property; import org.wso2.carbon.identity.application.common.model.ProvisioningConnectorConfig; import org.wso2.carbon.identity.application.common.model.RoleMapping; +import org.wso2.carbon.identity.base.IdentityConstants; import org.wso2.carbon.identity.core.model.ExpressionNode; import org.wso2.carbon.identity.core.util.IdentityDatabaseUtil; import org.wso2.carbon.identity.core.util.IdentityTenantUtil; @@ -588,6 +589,7 @@ public Object[][] addIdPData() { federatedAuthenticatorConfig.setDisplayName("DisplayName1"); federatedAuthenticatorConfig.setName("Name"); federatedAuthenticatorConfig.setEnabled(true); + federatedAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); Property property1 = new Property(); property1.setName("Property1"); property1.setValue("value1"); @@ -1104,6 +1106,7 @@ public Object[][] updateIdPData() { federatedAuthenticatorConfig.setDisplayName("DisplayName1"); federatedAuthenticatorConfig.setName("Name"); federatedAuthenticatorConfig.setEnabled(true); + federatedAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); Property property1 = new Property(); property1.setName("Property1"); property1.setValue("value1"); @@ -1161,6 +1164,7 @@ public Object[][] updateIdPData() { newFederatedAuthenticatorConfig.setDisplayName("DisplayName1New"); newFederatedAuthenticatorConfig.setName("Name"); newFederatedAuthenticatorConfig.setEnabled(true); + newFederatedAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); Property property1New = new Property(); property1New.setName("Property1New"); property1New.setValue("value1New"); @@ -1733,6 +1737,7 @@ private void addTestIdps() throws IdentityProviderManagementException { federatedAuthenticatorConfig.setDisplayName("DisplayName1"); federatedAuthenticatorConfig.setName("Name"); federatedAuthenticatorConfig.setEnabled(true); + federatedAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); Property property1 = new Property(); property1.setName("Property1"); property1.setValue("value1"); @@ -1864,6 +1869,7 @@ private void addTestTrustedTokenIssuers() throws IdentityProviderManagementExcep federatedAuthenticatorConfig.setDisplayName("DisplayName1"); federatedAuthenticatorConfig.setName("Name"); federatedAuthenticatorConfig.setEnabled(true); + federatedAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); Property property1 = new Property(); property1.setName("Property1"); property1.setValue("value1"); From 6ab1997e2ba40d9c81827d48c33a71078b188e5a Mon Sep 17 00:00:00 2001 From: thisarawelmilla Date: Thu, 19 Sep 2024 10:23:44 +0530 Subject: [PATCH 2/9] Add new DefinedBy property to authenticator config. --- .../model/FederatedAuthenticatorConfig.java | 1 + .../model/LocalAuthenticatorConfig.java | 1 + .../application/mgt/ApplicationConstants.java | 1 + .../mgt/dao/impl/ApplicationDAOImpl.java | 9 +++++++-- .../framework/util/FrameworkUtils.java | 20 +++++++++++++++++++ .../carbon/idp/mgt/dao/IdPManagementDAO.java | 12 +++++++---- 6 files changed, 38 insertions(+), 6 deletions(-) diff --git a/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/FederatedAuthenticatorConfig.java b/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/FederatedAuthenticatorConfig.java index fa22596f1e8a..7822d9404c38 100644 --- a/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/FederatedAuthenticatorConfig.java +++ b/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/FederatedAuthenticatorConfig.java @@ -116,6 +116,7 @@ public static FederatedAuthenticatorConfig build(OMElement federatedAuthenticato // TODO: Remove warn log, once feature is ready. if (federatedAuthenticatorConfig.getDefinedByType() == null) { + federatedAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); LOG.warn("The defined by type is not set for the : " + federatedAuthenticatorConfig.getName()); } diff --git a/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/LocalAuthenticatorConfig.java b/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/LocalAuthenticatorConfig.java index 58f528d1ec26..fa5dbde68778 100644 --- a/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/LocalAuthenticatorConfig.java +++ b/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/LocalAuthenticatorConfig.java @@ -123,6 +123,7 @@ public static LocalAuthenticatorConfig build(OMElement localAuthenticatorConfigO } if (localAuthenticatorConfig.getDefinedByType() == null) { + localAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); LOG.warn("The defined by type is not set for the : " + localAuthenticatorConfig.getName()); } diff --git a/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/main/java/org/wso2/carbon/identity/application/mgt/ApplicationConstants.java b/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/main/java/org/wso2/carbon/identity/application/mgt/ApplicationConstants.java index 2bca40c45d54..786ce81d1ef9 100644 --- a/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/main/java/org/wso2/carbon/identity/application/mgt/ApplicationConstants.java +++ b/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/main/java/org/wso2/carbon/identity/application/mgt/ApplicationConstants.java @@ -50,6 +50,7 @@ private ApplicationConstants() { public static final String IDP_NAME = "idpName"; public static final String IDP_AUTHENTICATOR_NAME = "authenticatorName"; public static final String IDP_AUTHENTICATOR_DISPLAY_NAME = "authenticatorDisplayName"; + public static final String IDP_AUTHENTICATOR_DEFINED_BY_TYPE = "definedByType"; public static final String APPLICATION_DOMAIN = "Application"; // Regex for validating application name. public static final String APP_NAME_VALIDATING_REGEX = "^[a-zA-Z0-9 ._-]*$"; diff --git a/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/main/java/org/wso2/carbon/identity/application/mgt/dao/impl/ApplicationDAOImpl.java b/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/main/java/org/wso2/carbon/identity/application/mgt/dao/impl/ApplicationDAOImpl.java index 48192a9b974a..f6f807a95011 100644 --- a/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/main/java/org/wso2/carbon/identity/application/mgt/dao/impl/ApplicationDAOImpl.java +++ b/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/main/java/org/wso2/carbon/identity/application/mgt/dao/impl/ApplicationDAOImpl.java @@ -3098,7 +3098,8 @@ private LocalAndOutboundAuthenticationConfig getLocalAndOutboundAuthenticationCo .get(ApplicationConstants.IDP_AUTHENTICATOR_NAME)); localAuthenticator.setDisplayName(authenticatorInfo .get(ApplicationConstants.IDP_AUTHENTICATOR_DISPLAY_NAME)); - localAuthenticator.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); + localAuthenticator.setDefinedByType(IdentityConstants.DefinedByType.valueOf( + authenticatorInfo.get(ApplicationConstants.IDP_AUTHENTICATOR_DEFINED_BY_TYPE))); stepLocalAuth.get(step).add(localAuthenticator); } else { Map> stepFedIdps = stepFedIdPAuthenticators @@ -3117,7 +3118,8 @@ private LocalAndOutboundAuthenticationConfig getLocalAndOutboundAuthenticationCo .get(ApplicationConstants.IDP_AUTHENTICATOR_NAME)); fedAuthenticator.setDisplayName(authenticatorInfo .get(ApplicationConstants.IDP_AUTHENTICATOR_DISPLAY_NAME)); - fedAuthenticator.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); + fedAuthenticator.setDefinedByType(IdentityConstants.DefinedByType.valueOf( + authenticatorInfo.get(ApplicationConstants.IDP_AUTHENTICATOR_DEFINED_BY_TYPE))); idpAuths.add(fedAuthenticator); } @@ -5029,6 +5031,9 @@ private Map getAuthenticatorInfo(Connection conn, int tenantId, returnData .put(ApplicationConstants.IDP_AUTHENTICATOR_DISPLAY_NAME, rs.getString(3)); } + // TODO: Read from database and set the DefinedBy property to the authenticator. + returnData.put(ApplicationConstants.IDP_AUTHENTICATOR_DEFINED_BY_TYPE, + IdentityConstants.DefinedByType.SYSTEM.toString()); } finally { IdentityApplicationManagementUtil.closeStatement(prepStmt); } diff --git a/components/authentication-framework/org.wso2.carbon.identity.application.authentication.framework/src/main/java/org/wso2/carbon/identity/application/authentication/framework/util/FrameworkUtils.java b/components/authentication-framework/org.wso2.carbon.identity.application.authentication.framework/src/main/java/org/wso2/carbon/identity/application/authentication/framework/util/FrameworkUtils.java index 054821bc69bd..f6775e77740d 100644 --- a/components/authentication-framework/org.wso2.carbon.identity.application.authentication.framework/src/main/java/org/wso2/carbon/identity/application/authentication/framework/util/FrameworkUtils.java +++ b/components/authentication-framework/org.wso2.carbon.identity.application.authentication.framework/src/main/java/org/wso2/carbon/identity/application/authentication/framework/util/FrameworkUtils.java @@ -115,6 +115,7 @@ import org.wso2.carbon.identity.application.common.model.Property; import org.wso2.carbon.identity.application.common.model.ServiceProvider; import org.wso2.carbon.identity.application.mgt.ApplicationConstants; +import org.wso2.carbon.identity.base.IdentityConstants; import org.wso2.carbon.identity.base.IdentityException; import org.wso2.carbon.identity.base.IdentityRuntimeException; import org.wso2.carbon.identity.central.log.mgt.utils.LoggerUtils; @@ -4190,4 +4191,23 @@ public static boolean isURLRelative(String uriString) throws URISyntaxException return !new URI(uriString).isAbsolute(); } + + /** + * This method return defined by type for the given authenticator name. + * + * @param authenticatorName Name of the authenticator. + * @return The defined by type. + * @throws FrameworkException If no authenticator found for the given authenticator name. + */ + public static IdentityConstants.DefinedByType getAuthenticatorDefinedByType(String authenticatorName) + throws FrameworkException { + + for (ApplicationAuthenticator authenticator: FrameworkServiceComponent.getAuthenticators()) { + if (authenticator.getName().equals(authenticatorName)) { + return authenticator.getDefinedByType(); + } + } + + throw new FrameworkException("No authenticator instance is found for " + authenticatorName); + } } diff --git a/components/idp-mgt/org.wso2.carbon.idp.mgt/src/main/java/org/wso2/carbon/idp/mgt/dao/IdPManagementDAO.java b/components/idp-mgt/org.wso2.carbon.idp.mgt/src/main/java/org/wso2/carbon/idp/mgt/dao/IdPManagementDAO.java index 15c492891b08..11a70218ccf5 100644 --- a/components/idp-mgt/org.wso2.carbon.idp.mgt/src/main/java/org/wso2/carbon/idp/mgt/dao/IdPManagementDAO.java +++ b/components/idp-mgt/org.wso2.carbon.idp.mgt/src/main/java/org/wso2/carbon/idp/mgt/dao/IdPManagementDAO.java @@ -3419,6 +3419,8 @@ public IdentityProvider getIdPByAuthenticatorPropertyValue(Connection dbConnecti String roleClaimUri = rs.getString("ROLE_CLAIM_URI"); String defaultAuthenticatorName = rs.getString("DEFAULT_AUTHENTICATOR_NAME"); + // TODO: Read from database and set the DefinedBy property to the authenticator. + String defaultAuthenticatorDefinedByType = IdentityConstants.DefinedByType.SYSTEM.toString(); String defaultProvisioningConnectorConfigName = rs.getString("DEFAULT_PRO_CONNECTOR_NAME"); federatedIdp.setIdentityProviderDescription(rs.getString("DESCRIPTION")); @@ -3453,8 +3455,8 @@ public IdentityProvider getIdPByAuthenticatorPropertyValue(Connection dbConnecti if (defaultAuthenticatorName != null) { FederatedAuthenticatorConfig defaultAuthenticator = new FederatedAuthenticatorConfig(); defaultAuthenticator.setName(defaultAuthenticatorName); - // TODO: Check the authenticator type and set the DefinedBy property accordingly. - defaultAuthenticator.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); + defaultAuthenticator.setDefinedByType(IdentityConstants.DefinedByType.valueOf( + defaultAuthenticatorDefinedByType)); federatedIdp.setDefaultAuthenticatorConfig(defaultAuthenticator); } @@ -3584,6 +3586,8 @@ public IdentityProvider getIdPByAuthenticatorPropertyValue(Connection dbConnecti String roleClaimUri = rs.getString("ROLE_CLAIM_URI"); String defaultAuthenticatorName = rs.getString("DEFAULT_AUTHENTICATOR_NAME"); + // TODO: Read from database and set the DefinedBy property to the authenticator. + String defaultAuthenticatorDefinedByType = IdentityConstants.DefinedByType.SYSTEM.toString(); String defaultProvisioningConnectorConfigName = rs.getString("DEFAULT_PRO_CONNECTOR_NAME"); federatedIdp.setIdentityProviderDescription(rs.getString("DESCRIPTION")); @@ -3618,8 +3622,8 @@ public IdentityProvider getIdPByAuthenticatorPropertyValue(Connection dbConnecti if (defaultAuthenticatorName != null) { FederatedAuthenticatorConfig defaultAuthenticator = new FederatedAuthenticatorConfig(); defaultAuthenticator.setName(defaultAuthenticatorName); - // TODO: Check the authenticator type and set the DefinedBy property accordingly. - defaultAuthenticator.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); + defaultAuthenticator.setDefinedByType(IdentityConstants.DefinedByType.valueOf( + defaultAuthenticatorDefinedByType)); federatedIdp.setDefaultAuthenticatorConfig(defaultAuthenticator); } From 1a9b323714757d2333eb2bd5feaa50c69eca36cd Mon Sep 17 00:00:00 2001 From: thisarawelmilla Date: Thu, 19 Sep 2024 12:19:30 +0530 Subject: [PATCH 3/9] Unit test for adding new DefinedBy property to authenticator config. --- .../mgt/ApplicationManagementServiceImplTest.java | 13 +++++++++++++ .../mgt/IdentityProviderManagementServiceTest.java | 4 +++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/test/java/org/wso2/carbon/identity/application/mgt/ApplicationManagementServiceImplTest.java b/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/test/java/org/wso2/carbon/identity/application/mgt/ApplicationManagementServiceImplTest.java index 4d95b4d7dbd5..d32a4d1ae1d7 100644 --- a/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/test/java/org/wso2/carbon/identity/application/mgt/ApplicationManagementServiceImplTest.java +++ b/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/test/java/org/wso2/carbon/identity/application/mgt/ApplicationManagementServiceImplTest.java @@ -617,6 +617,19 @@ public void testGetConfiguredAuthenticators() throws IdentityApplicationManageme AuthenticationStep[] steps = applicationManagementService.getConfiguredAuthenticators(resourceID, SUPER_TENANT_DOMAIN_NAME); + for (AuthenticationStep step : steps) { + LocalAuthenticatorConfig[] localAuthenticators = step.getLocalAuthenticatorConfigs(); + for (LocalAuthenticatorConfig localConfig : localAuthenticators) { + Assert.assertNotNull(localConfig.getDefinedByType()); + } + IdentityProvider[] identityProviders = step.getFederatedIdentityProviders(); + for (IdentityProvider idp : identityProviders) { + for (FederatedAuthenticatorConfig fedConfig: idp.getFederatedAuthenticatorConfigs()) { + Assert.assertNotNull(fedConfig.getDefinedByType()); + } + } + } + Assert.assertEquals(steps.length, 1); Assert.assertEquals(steps[0].getStepOrder(), 1); applicationManagementService.deleteApplication(APPLICATION_NAME_1, SUPER_TENANT_DOMAIN_NAME, USERNAME_1); diff --git a/components/idp-mgt/org.wso2.carbon.idp.mgt/src/test/java/org/wso2/carbon/idp/mgt/IdentityProviderManagementServiceTest.java b/components/idp-mgt/org.wso2.carbon.idp.mgt/src/test/java/org/wso2/carbon/idp/mgt/IdentityProviderManagementServiceTest.java index d54c396949f9..d6482c612cac 100644 --- a/components/idp-mgt/org.wso2.carbon.idp.mgt/src/test/java/org/wso2/carbon/idp/mgt/IdentityProviderManagementServiceTest.java +++ b/components/idp-mgt/org.wso2.carbon.idp.mgt/src/test/java/org/wso2/carbon/idp/mgt/IdentityProviderManagementServiceTest.java @@ -23,6 +23,7 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; +import org.wso2.carbon.base.MultitenantConstants; import org.wso2.carbon.identity.application.common.ApplicationAuthenticatorService; import org.wso2.carbon.identity.application.common.ProvisioningConnectorService; import org.wso2.carbon.identity.application.common.model.Claim; @@ -1038,7 +1039,8 @@ private void addResidentIdp() throws IdentityProviderManagementException { idpProperty1.setValue("20"); residentIdp.setIdpProperties(new IdentityProviderProperty[]{idpProperty1}); - identityProviderManagementService.addIdP(residentIdp); + IdentityProviderManager.getInstance().addResidentIdP(residentIdp, + MultitenantConstants.SUPER_TENANT_DOMAIN_NAME); } private void addSharedIdp() throws SQLException, IdentityProviderManagementException { From d4a99a1ddfec5d3f0e32a280487c9786c2d14874 Mon Sep 17 00:00:00 2001 From: thisarawelmilla Date: Thu, 26 Sep 2024 11:45:40 +0530 Subject: [PATCH 4/9] Update wsdl files. --- .../resources/IdentityProviderMgtService.wsdl | 243 +++++++++--------- 1 file changed, 121 insertions(+), 122 deletions(-) diff --git a/service-stubs/identity/org.wso2.carbon.idp.mgt.stub/src/main/resources/IdentityProviderMgtService.wsdl b/service-stubs/identity/org.wso2.carbon.idp.mgt.stub/src/main/resources/IdentityProviderMgtService.wsdl index 03fcbc99e080..0811bfe8c6cc 100644 --- a/service-stubs/identity/org.wso2.carbon.idp.mgt.stub/src/main/resources/IdentityProviderMgtService.wsdl +++ b/service-stubs/identity/org.wso2.carbon.idp.mgt.stub/src/main/resources/IdentityProviderMgtService.wsdl @@ -1,14 +1,76 @@ - - + IdentityProviderMgtService + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -26,7 +88,7 @@ - + @@ -52,74 +114,11 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -149,7 +148,7 @@ - + @@ -164,8 +163,8 @@ - - + + @@ -175,7 +174,7 @@ - + @@ -186,37 +185,13 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -228,7 +203,7 @@ - + @@ -242,7 +217,7 @@ - + @@ -254,14 +229,14 @@ - + - + @@ -276,26 +251,14 @@ - - - - - - - - - - - - - + - + @@ -321,7 +284,7 @@ - + @@ -336,7 +299,7 @@ - + @@ -364,7 +327,7 @@ - + @@ -376,7 +339,7 @@ - + @@ -399,6 +362,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -407,11 +406,11 @@ - + - + From c9166dbe303680eb048fc4a44640a6dae355ef59 Mon Sep 17 00:00:00 2001 From: thisarawelmilla Date: Thu, 26 Sep 2024 12:14:57 +0530 Subject: [PATCH 5/9] Improve unit tests. --- .../mgt/ApplicationManagementServiceImplTest.java | 7 +++++++ .../org/wso2/carbon/idp/mgt/dao/IdPManagementDAOTest.java | 8 ++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/test/java/org/wso2/carbon/identity/application/mgt/ApplicationManagementServiceImplTest.java b/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/test/java/org/wso2/carbon/identity/application/mgt/ApplicationManagementServiceImplTest.java index d32a4d1ae1d7..76d138f9a17d 100644 --- a/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/test/java/org/wso2/carbon/identity/application/mgt/ApplicationManagementServiceImplTest.java +++ b/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/test/java/org/wso2/carbon/identity/application/mgt/ApplicationManagementServiceImplTest.java @@ -63,6 +63,7 @@ import org.wso2.carbon.identity.application.mgt.internal.ApplicationManagementServiceComponentHolder; import org.wso2.carbon.identity.application.mgt.provider.ApplicationPermissionProvider; import org.wso2.carbon.identity.application.mgt.provider.RegistryBasedApplicationPermissionProvider; +import org.wso2.carbon.identity.base.IdentityConstants; import org.wso2.carbon.identity.common.testng.WithH2Database; import org.wso2.carbon.identity.common.testng.realm.InMemoryRealmService; import org.wso2.carbon.identity.common.testng.realm.MockUserStoreManager; @@ -810,6 +811,10 @@ public void testGetAllLocalAuthenticators() throws IdentityApplicationManagement LocalAuthenticatorConfig[] localAuthenticatorConfigs = applicationManagementService.getAllLocalAuthenticators (SUPER_TENANT_DOMAIN_NAME); + for (LocalAuthenticatorConfig config: localAuthenticatorConfigs) { + Assert.assertNotNull(config.getDefinedByType(), ""); + } + Assert.assertEquals(localAuthenticatorConfigs[0], localAuthenticatorConfig); } @@ -1245,11 +1250,13 @@ private void addApplicationConfigurations(ServiceProvider serviceProvider) { identityProvider.setIdentityProviderName(IDP_NAME_1); FederatedAuthenticatorConfig federatedAuthenticatorConfig = new FederatedAuthenticatorConfig(); federatedAuthenticatorConfig.setName("Federated authenticator"); + federatedAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); identityProvider.setFederatedAuthenticatorConfigs(new FederatedAuthenticatorConfig[] {federatedAuthenticatorConfig}); authenticationStep.setFederatedIdentityProviders(new IdentityProvider[]{identityProvider}); LocalAuthenticatorConfig localAuthenticatorConfig = new LocalAuthenticatorConfig(); localAuthenticatorConfig.setName("Local authenticator"); + localAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); authenticationStep.setLocalAuthenticatorConfigs(new LocalAuthenticatorConfig[]{localAuthenticatorConfig}); authenticationConfig.setAuthenticationSteps(new AuthenticationStep[]{authenticationStep}); serviceProvider.setLocalAndOutBoundAuthenticationConfig(authenticationConfig); diff --git a/components/idp-mgt/org.wso2.carbon.idp.mgt/src/test/java/org/wso2/carbon/idp/mgt/dao/IdPManagementDAOTest.java b/components/idp-mgt/org.wso2.carbon.idp.mgt/src/test/java/org/wso2/carbon/idp/mgt/dao/IdPManagementDAOTest.java index f196b9a35447..a321edca4066 100644 --- a/components/idp-mgt/org.wso2.carbon.idp.mgt/src/test/java/org/wso2/carbon/idp/mgt/dao/IdPManagementDAOTest.java +++ b/components/idp-mgt/org.wso2.carbon.idp.mgt/src/test/java/org/wso2/carbon/idp/mgt/dao/IdPManagementDAOTest.java @@ -71,10 +71,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mockStatic; import static org.mockito.Mockito.when; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertNotEquals; -import static org.testng.Assert.assertNull; -import static org.testng.Assert.assertThrows; +import static org.testng.Assert.*; import static org.wso2.carbon.idp.mgt.util.IdPManagementConstants.RESET_PROVISIONING_ENTITIES_ON_CONFIG_UPDATE; /** @@ -1032,6 +1029,7 @@ public void testGetIdPByAuthenticatorPropertyValue(int tenantId, String idpName, value, authenticator, tenantId, TENANT_DOMAIN); if (isExist) { assertEquals(idpResult.getIdentityProviderName(), idpName); + assertNotNull(idpResult.getDefaultAuthenticatorConfig().getDefinedByType()); } else { assertNull(idpResult); } @@ -1084,6 +1082,7 @@ public void testGetIdPByAuthenticatorPropertyWithoutAuthenticatorData(int tenant if (isExist) { assertEquals(idpResult.getIdentityProviderName(), idpName); + assertNotNull(idpResult.getDefaultAuthenticatorConfig().getDefinedByType()); } else { assertNull(idpResult); } @@ -1748,6 +1747,7 @@ private void addTestIdps() throws IdentityProviderManagementException { property2.setConfidential(false); federatedAuthenticatorConfig.setProperties(new Property[]{property1, property2}); idp1.setFederatedAuthenticatorConfigs(new FederatedAuthenticatorConfig[]{federatedAuthenticatorConfig}); + idp1.setDefaultAuthenticatorConfig(federatedAuthenticatorConfig); ProvisioningConnectorConfig provisioningConnectorConfig1 = new ProvisioningConnectorConfig(); provisioningConnectorConfig1.setName("ProvisiningConfig1"); From ef7779cef796d64f646c2475058e9b092addd50c Mon Sep 17 00:00:00 2001 From: thisarawelmilla Date: Thu, 26 Sep 2024 14:45:52 +0530 Subject: [PATCH 6/9] Address comments. --- .../application/common/ApplicationAuthenticatorService.java | 6 ++---- .../common/model/FederatedAuthenticatorConfig.java | 2 +- .../identity/application/common/model/IdentityProvider.java | 2 +- .../application/common/model/LocalAuthenticatorConfig.java | 2 +- .../mgt/ApplicationManagementServiceImplTest.java | 4 ---- 5 files changed, 5 insertions(+), 11 deletions(-) diff --git a/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/ApplicationAuthenticatorService.java b/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/ApplicationAuthenticatorService.java index f5975c3af40f..efbfa7dbbec5 100644 --- a/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/ApplicationAuthenticatorService.java +++ b/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/ApplicationAuthenticatorService.java @@ -91,9 +91,8 @@ public RequestPathAuthenticatorConfig getRequestPathAuthenticatorByName(String n public void addLocalAuthenticator(LocalAuthenticatorConfig authenticator) { if (authenticator != null) { - //TODO: Remove warn log, once feature is ready. if (authenticator.getDefinedByType() == null) { - LOG.warn("The defined by type is not set for the : " + authenticator.getName()); + LOG.debug("The defined by type is not set for the : " + authenticator.getName()); } localAuthenticators.add(authenticator); } @@ -107,9 +106,8 @@ public void removeLocalAuthenticator(LocalAuthenticatorConfig authenticator) { public void addFederatedAuthenticator(FederatedAuthenticatorConfig authenticator) { if (authenticator != null) { - //TODO: Remove warn log, once feature is ready. if (authenticator.getDefinedByType() == null) { - LOG.warn("The defined by type is not set for the : " + authenticator.getName()); + LOG.debug("The defined by type is not set for the : " + authenticator.getName()); } federatedAuthenticators.add(authenticator); } diff --git a/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/FederatedAuthenticatorConfig.java b/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/FederatedAuthenticatorConfig.java index 7822d9404c38..8f98b2da868d 100644 --- a/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/FederatedAuthenticatorConfig.java +++ b/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/FederatedAuthenticatorConfig.java @@ -117,7 +117,7 @@ public static FederatedAuthenticatorConfig build(OMElement federatedAuthenticato // TODO: Remove warn log, once feature is ready. if (federatedAuthenticatorConfig.getDefinedByType() == null) { federatedAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); - LOG.warn("The defined by type is not set for the : " + federatedAuthenticatorConfig.getName()); + LOG.debug("The defined by type is not set for the : " + federatedAuthenticatorConfig.getName()); } return federatedAuthenticatorConfig; diff --git a/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/IdentityProvider.java b/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/IdentityProvider.java index 9d5a4a691bbe..24e09ccb9b15 100644 --- a/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/IdentityProvider.java +++ b/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/IdentityProvider.java @@ -424,7 +424,7 @@ public void setFederatedAuthenticatorConfigs( // TODO: Remove warn log, once feature is ready. for (FederatedAuthenticatorConfig config: federatedAuthenticatorConfigs) { if (config.getDefinedByType() == null) { - LOG.warn("The defined by type is not set for the : " + config.getName()); + LOG.debug("The defined by type is not set for the : " + config.getName()); } } Set propertySet = diff --git a/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/LocalAuthenticatorConfig.java b/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/LocalAuthenticatorConfig.java index fa5dbde68778..a189812af5d8 100644 --- a/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/LocalAuthenticatorConfig.java +++ b/components/application-mgt/org.wso2.carbon.identity.application.common/src/main/java/org/wso2/carbon/identity/application/common/model/LocalAuthenticatorConfig.java @@ -124,7 +124,7 @@ public static LocalAuthenticatorConfig build(OMElement localAuthenticatorConfigO if (localAuthenticatorConfig.getDefinedByType() == null) { localAuthenticatorConfig.setDefinedByType(IdentityConstants.DefinedByType.SYSTEM); - LOG.warn("The defined by type is not set for the : " + localAuthenticatorConfig.getName()); + LOG.debug("The defined by type is not set for the : " + localAuthenticatorConfig.getName()); } return localAuthenticatorConfig; diff --git a/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/test/java/org/wso2/carbon/identity/application/mgt/ApplicationManagementServiceImplTest.java b/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/test/java/org/wso2/carbon/identity/application/mgt/ApplicationManagementServiceImplTest.java index 76d138f9a17d..b1abb5609352 100644 --- a/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/test/java/org/wso2/carbon/identity/application/mgt/ApplicationManagementServiceImplTest.java +++ b/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/test/java/org/wso2/carbon/identity/application/mgt/ApplicationManagementServiceImplTest.java @@ -811,10 +811,6 @@ public void testGetAllLocalAuthenticators() throws IdentityApplicationManagement LocalAuthenticatorConfig[] localAuthenticatorConfigs = applicationManagementService.getAllLocalAuthenticators (SUPER_TENANT_DOMAIN_NAME); - for (LocalAuthenticatorConfig config: localAuthenticatorConfigs) { - Assert.assertNotNull(config.getDefinedByType(), ""); - } - Assert.assertEquals(localAuthenticatorConfigs[0], localAuthenticatorConfig); } From 1404a70b72f7cc1685996e69737099cf270cd7a4 Mon Sep 17 00:00:00 2001 From: thisarawelmilla Date: Thu, 26 Sep 2024 16:56:41 +0530 Subject: [PATCH 7/9] Update wsdl files --- .../resources/IdentityProviderMgtService.wsdl | 195 +++++++++--------- 1 file changed, 102 insertions(+), 93 deletions(-) diff --git a/service-stubs/identity/org.wso2.carbon.idp.mgt.stub/src/main/resources/IdentityProviderMgtService.wsdl b/service-stubs/identity/org.wso2.carbon.idp.mgt.stub/src/main/resources/IdentityProviderMgtService.wsdl index 0811bfe8c6cc..fbd3a77223f8 100644 --- a/service-stubs/identity/org.wso2.carbon.idp.mgt.stub/src/main/resources/IdentityProviderMgtService.wsdl +++ b/service-stubs/identity/org.wso2.carbon.idp.mgt.stub/src/main/resources/IdentityProviderMgtService.wsdl @@ -1,31 +1,32 @@ - + IdentityProviderMgtService - + + - - - - + + + + - - + + - + - + - - + + - + @@ -41,8 +42,8 @@ - - + + @@ -53,9 +54,9 @@ - + - + @@ -67,10 +68,11 @@ + - + @@ -88,7 +90,7 @@ - + @@ -114,7 +116,7 @@ - + @@ -148,7 +150,7 @@ - + @@ -163,8 +165,8 @@ - - + + @@ -174,7 +176,7 @@ - + @@ -185,192 +187,192 @@ - + - + - + + + + + + + + - + - + - + - + - + - + - + - + + + + - + - + - + - + - + - + - + - - + - + - + - + - + - + - + - + - + - - - + - + - - + - + - - - + - + - + - + - + - + - + - + + + + + + - + - + - + - + - + - + - - - - - - + - + - - - - - - + - + + @@ -382,7 +384,7 @@ - + @@ -394,7 +396,7 @@ - + @@ -405,12 +407,19 @@ + + + + + + + - + - + From aa39c91bcfaf4d2bb1fbd3d0e0bfb020aba7beb4 Mon Sep 17 00:00:00 2001 From: thisarawelmilla Date: Thu, 26 Sep 2024 20:30:13 +0530 Subject: [PATCH 8/9] Improve unit tests. --- .../mgt/dao/impl/ApplicationDAOImpl.java | 2 +- .../ApplicationManagementServiceImplTest.java | 111 ++++++++++++++---- .../framework/util/FrameworkUtils.java | 6 +- .../identity/base/IdentityConstants.java | 2 +- 4 files changed, 94 insertions(+), 27 deletions(-) diff --git a/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/main/java/org/wso2/carbon/identity/application/mgt/dao/impl/ApplicationDAOImpl.java b/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/main/java/org/wso2/carbon/identity/application/mgt/dao/impl/ApplicationDAOImpl.java index f6f807a95011..d7d85aa40167 100644 --- a/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/main/java/org/wso2/carbon/identity/application/mgt/dao/impl/ApplicationDAOImpl.java +++ b/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/main/java/org/wso2/carbon/identity/application/mgt/dao/impl/ApplicationDAOImpl.java @@ -1569,7 +1569,7 @@ private void updateLocalAndOutboundAuthenticationConfiguration(int applicationId lclAuthenticator.getDisplayName()); } else { if (lclAuthenticator.getDefinedByType() == null) { - log.warn("Authenticator already exists. Updating the authenticator, but the " + + log.debug("Authenticator already exists. Updating the authenticator, but the " + "defined by type is not set."); } else { log.debug("Authenticator already exists. Updating the authenticator.The defined " diff --git a/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/test/java/org/wso2/carbon/identity/application/mgt/ApplicationManagementServiceImplTest.java b/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/test/java/org/wso2/carbon/identity/application/mgt/ApplicationManagementServiceImplTest.java index b1abb5609352..3d4f8b99748b 100644 --- a/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/test/java/org/wso2/carbon/identity/application/mgt/ApplicationManagementServiceImplTest.java +++ b/components/application-mgt/org.wso2.carbon.identity.application.mgt/src/test/java/org/wso2/carbon/identity/application/mgt/ApplicationManagementServiceImplTest.java @@ -18,9 +18,11 @@ package org.wso2.carbon.identity.application.mgt; +import org.apache.commons.dbcp.BasicDataSource; import org.mockito.MockedStatic; import org.mockito.Mockito; import org.testng.Assert; +import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; @@ -68,6 +70,7 @@ import org.wso2.carbon.identity.common.testng.realm.InMemoryRealmService; import org.wso2.carbon.identity.common.testng.realm.MockUserStoreManager; import org.wso2.carbon.identity.core.internal.IdentityCoreServiceDataHolder; +import org.wso2.carbon.identity.core.util.IdentityDatabaseUtil; import org.wso2.carbon.identity.core.util.IdentityTenantUtil; import org.wso2.carbon.identity.core.util.IdentityUtil; import org.wso2.carbon.identity.secret.mgt.core.IdPSecretsProcessor; @@ -96,16 +99,23 @@ import java.lang.reflect.Field; import java.nio.file.Paths; +import java.sql.Connection; +import java.sql.SQLException; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; + import static java.lang.Boolean.FALSE; import static java.lang.Boolean.TRUE; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.mockStatic; import static org.mockito.Mockito.when; import static org.wso2.carbon.CarbonConstants.REGISTRY_SYSTEM_USERNAME; import static org.wso2.carbon.identity.application.common.util.IdentityApplicationConstants.PlatformType; @@ -150,15 +160,18 @@ public class ApplicationManagementServiceImplTest { private static final String ANDROID_PACKAGE_NAME_1 = "com.wso2.sample.mobile.application"; private static final String ANDROID_PACKAGE_NAME_2 = "com.wso2.sample.mobile.application2"; private static final String APPLE_APP_ID = "APPLETEAMID.com.wso2.mobile.sample"; + private static final Map dataSourceMap = new HashMap<>(); + private static final String DB_NAME = "action_mgt"; private IdPManagementDAO idPManagementDAO; private ApplicationManagementServiceImpl applicationManagementService; @BeforeClass - public void setup() throws RegistryException, UserStoreException, SecretManagementException { + public void setup() throws RegistryException, UserStoreException, SecretManagementException, SQLException { setupConfiguration(); applicationManagementService = ApplicationManagementServiceImpl.getInstance(); + initiateH2Database(getFilePath()); SecretsProcessor idpSecretsProcessor = mock( IdPSecretsProcessor.class); @@ -186,6 +199,41 @@ public void setup() throws RegistryException, UserStoreException, SecretManageme CarbonConstants.ENABLE_LEGACY_AUTHZ_RUNTIME = false; } + @AfterClass + public void wrapUp() throws Exception { + + closeH2Database(); + } + + private void initiateH2Database(String scriptPath) throws SQLException { + + BasicDataSource dataSource = new BasicDataSource(); + dataSource.setDriverClassName("org.h2.Driver"); + dataSource.setUsername("username"); + dataSource.setPassword("password"); + dataSource.setUrl("jdbc:h2:mem:test" + DB_NAME); + dataSource.setTestOnBorrow(true); + dataSource.setValidationQuery("select 1"); + try (Connection connection = dataSource.getConnection()) { + connection.createStatement().executeUpdate("RUNSCRIPT FROM '" + scriptPath + "'"); + } + dataSourceMap.put(DB_NAME, dataSource); + } + + private static String getFilePath() { + + return Paths.get(System.getProperty("user.dir"), "src", "test", "resources", "dbscripts", "identity.sql") + .toString(); + } + + private static void closeH2Database() throws SQLException { + + BasicDataSource dataSource = dataSourceMap.get(DB_NAME); + if (dataSource != null) { + dataSource.close(); + } + } + @DataProvider(name = "addApplicationDataProvider") public Object[][] addApplicationDataProvider() { @@ -603,39 +651,60 @@ public void testGetSAMLApplicationBasicInfoWithFilterOffsetLimit(String filter, } @Test - public void testGetConfiguredAuthenticators() throws IdentityApplicationManagementException { + public void testGetConfiguredAuthenticators() throws IdentityApplicationManagementException, SQLException { ServiceProvider inputSP1 = new ServiceProvider(); inputSP1.setApplicationName(APPLICATION_NAME_1); addApplicationConfigurations(inputSP1); + MockedStatic identityDatabaseUtil; - // Adding application. - applicationManagementService.createApplication(inputSP1, SUPER_TENANT_DOMAIN_NAME, USERNAME_1); + try { + identityDatabaseUtil = mockStatic(IdentityDatabaseUtil.class); + mockDBConnection(identityDatabaseUtil); + identityDatabaseUtil.when(IdentityDatabaseUtil::getDataSource).thenReturn(dataSourceMap.get(DB_NAME)); - ApplicationBasicInfo applicationBasicInfo = applicationManagementService - .getApplicationBasicInfoByName(APPLICATION_NAME_1, SUPER_TENANT_DOMAIN_NAME); - String resourceID = applicationBasicInfo.getApplicationResourceId(); - AuthenticationStep[] steps = applicationManagementService.getConfiguredAuthenticators(resourceID, - SUPER_TENANT_DOMAIN_NAME); + // Adding application. + applicationManagementService.createApplication(inputSP1, SUPER_TENANT_DOMAIN_NAME, USERNAME_1); - for (AuthenticationStep step : steps) { - LocalAuthenticatorConfig[] localAuthenticators = step.getLocalAuthenticatorConfigs(); - for (LocalAuthenticatorConfig localConfig : localAuthenticators) { - Assert.assertNotNull(localConfig.getDefinedByType()); - } - IdentityProvider[] identityProviders = step.getFederatedIdentityProviders(); - for (IdentityProvider idp : identityProviders) { - for (FederatedAuthenticatorConfig fedConfig: idp.getFederatedAuthenticatorConfigs()) { - Assert.assertNotNull(fedConfig.getDefinedByType()); + ApplicationBasicInfo applicationBasicInfo = applicationManagementService + .getApplicationBasicInfoByName(APPLICATION_NAME_1, SUPER_TENANT_DOMAIN_NAME); + String resourceID = applicationBasicInfo.getApplicationResourceId(); + AuthenticationStep[] steps = applicationManagementService.getConfiguredAuthenticators(resourceID, + SUPER_TENANT_DOMAIN_NAME); + for (AuthenticationStep step : steps) { + LocalAuthenticatorConfig[] localAuthenticators = step.getLocalAuthenticatorConfigs(); + for (LocalAuthenticatorConfig localConfig : localAuthenticators) { + Assert.assertNotNull(localConfig.getDefinedByType()); + } + IdentityProvider[] identityProviders = step.getFederatedIdentityProviders(); + for (IdentityProvider idp : identityProviders) { + for (FederatedAuthenticatorConfig fedConfig: idp.getFederatedAuthenticatorConfigs()) { + Assert.assertNotNull(fedConfig.getDefinedByType()); + } } } + + Assert.assertEquals(steps.length, 1); + Assert.assertEquals(steps[0].getStepOrder(), 1); + identityDatabaseUtil.close(); + } finally { + applicationManagementService.deleteApplication(APPLICATION_NAME_1, SUPER_TENANT_DOMAIN_NAME, USERNAME_1); } + } + + private void mockDBConnection(MockedStatic identityDatabaseUtil) { - Assert.assertEquals(steps.length, 1); - Assert.assertEquals(steps[0].getStepOrder(), 1); - applicationManagementService.deleteApplication(APPLICATION_NAME_1, SUPER_TENANT_DOMAIN_NAME, USERNAME_1); + identityDatabaseUtil.when(() -> IdentityDatabaseUtil.getDBConnection(anyBoolean())) + .thenAnswer(invocation -> getConnection()); } + private Connection getConnection() throws Exception { + + if (dataSourceMap.get(DB_NAME) != null) { + return dataSourceMap.get(DB_NAME).getConnection(); + } + throw new RuntimeException("Invalid datasource."); + } @Test public void testGetCountOfAllApplications() throws IdentityApplicationManagementException { diff --git a/components/authentication-framework/org.wso2.carbon.identity.application.authentication.framework/src/main/java/org/wso2/carbon/identity/application/authentication/framework/util/FrameworkUtils.java b/components/authentication-framework/org.wso2.carbon.identity.application.authentication.framework/src/main/java/org/wso2/carbon/identity/application/authentication/framework/util/FrameworkUtils.java index f6775e77740d..ea9a6e922cf9 100644 --- a/components/authentication-framework/org.wso2.carbon.identity.application.authentication.framework/src/main/java/org/wso2/carbon/identity/application/authentication/framework/util/FrameworkUtils.java +++ b/components/authentication-framework/org.wso2.carbon.identity.application.authentication.framework/src/main/java/org/wso2/carbon/identity/application/authentication/framework/util/FrameworkUtils.java @@ -4197,10 +4197,8 @@ public static boolean isURLRelative(String uriString) throws URISyntaxException * * @param authenticatorName Name of the authenticator. * @return The defined by type. - * @throws FrameworkException If no authenticator found for the given authenticator name. */ - public static IdentityConstants.DefinedByType getAuthenticatorDefinedByType(String authenticatorName) - throws FrameworkException { + public static IdentityConstants.DefinedByType getAuthenticatorDefinedByType(String authenticatorName) { for (ApplicationAuthenticator authenticator: FrameworkServiceComponent.getAuthenticators()) { if (authenticator.getName().equals(authenticatorName)) { @@ -4208,6 +4206,6 @@ public static IdentityConstants.DefinedByType getAuthenticatorDefinedByType(Stri } } - throw new FrameworkException("No authenticator instance is found for " + authenticatorName); + return null; } } diff --git a/components/identity-core/org.wso2.carbon.identity.base/src/main/java/org/wso2/carbon/identity/base/IdentityConstants.java b/components/identity-core/org.wso2.carbon.identity.base/src/main/java/org/wso2/carbon/identity/base/IdentityConstants.java index c2a3cbdbe557..2b120e0892a1 100644 --- a/components/identity-core/org.wso2.carbon.identity.base/src/main/java/org/wso2/carbon/identity/base/IdentityConstants.java +++ b/components/identity-core/org.wso2.carbon.identity.base/src/main/java/org/wso2/carbon/identity/base/IdentityConstants.java @@ -623,7 +623,7 @@ public static class APIResponse { /** * The Authentication Type - SYSTEM: system define authenticator, CUSTOM: user defined authentication extension. */ - public enum DefinedByType { + public static enum DefinedByType { SYSTEM, USER From a8f81707f0c3cca65be21c90e356c1633db4f840 Mon Sep 17 00:00:00 2001 From: thisarawelmilla Date: Thu, 26 Sep 2024 23:30:22 +0530 Subject: [PATCH 9/9] Update wsdl files. --- .../identity/base/IdentityConstants.java | 2 +- .../IdentityApplicationManagementService.wsdl | 321 +++++++++--------- .../resources/IdentityProviderMgtService.wsdl | 49 ++- 3 files changed, 191 insertions(+), 181 deletions(-) diff --git a/components/identity-core/org.wso2.carbon.identity.base/src/main/java/org/wso2/carbon/identity/base/IdentityConstants.java b/components/identity-core/org.wso2.carbon.identity.base/src/main/java/org/wso2/carbon/identity/base/IdentityConstants.java index 2b120e0892a1..d91e4b7dea5d 100644 --- a/components/identity-core/org.wso2.carbon.identity.base/src/main/java/org/wso2/carbon/identity/base/IdentityConstants.java +++ b/components/identity-core/org.wso2.carbon.identity.base/src/main/java/org/wso2/carbon/identity/base/IdentityConstants.java @@ -621,7 +621,7 @@ public static class APIResponse { } /** - * The Authentication Type - SYSTEM: system define authenticator, CUSTOM: user defined authentication extension. + * The Authentication Type - SYSTEM: system define authenticator, USER: user defined authentication extension. */ public static enum DefinedByType { diff --git a/service-stubs/identity/org.wso2.carbon.identity.application.mgt.stub/src/main/resources/IdentityApplicationManagementService.wsdl b/service-stubs/identity/org.wso2.carbon.identity.application.mgt.stub/src/main/resources/IdentityApplicationManagementService.wsdl index 75589a8a952f..5bb04d7676f1 100644 --- a/service-stubs/identity/org.wso2.carbon.identity.application.mgt.stub/src/main/resources/IdentityApplicationManagementService.wsdl +++ b/service-stubs/identity/org.wso2.carbon.identity.application.mgt.stub/src/main/resources/IdentityApplicationManagementService.wsdl @@ -1,4 +1,4 @@ - + IdentityApplicationManagementService @@ -11,7 +11,7 @@ - + @@ -19,82 +19,58 @@ - + - + - + - - - - - - - - + - - - - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - + - + @@ -112,29 +88,29 @@ - + - + + + - + - + - + - - - + - + - + @@ -146,7 +122,7 @@ - + @@ -165,62 +141,72 @@ - + - + - + - + + + + - + - + - + - - + - + - + - + - + - + - + - + + + + + + + + - + + @@ -234,26 +220,28 @@ - + - + - + + + - + - + - + @@ -261,68 +249,82 @@ - + - + - - + - + - + + - + - + - + + + + + + - - + - + - + - + - + - + + + + - + + + + + + + + - + @@ -334,27 +336,26 @@ - + - + - - - + - + - + - + + @@ -363,35 +364,35 @@ - + - - + + - - + + - + - - - - + + + + - + - + - + @@ -403,8 +404,8 @@ - - + + @@ -415,9 +416,9 @@ - + - + @@ -437,7 +438,7 @@ - + @@ -448,8 +449,8 @@ - - + + @@ -468,7 +469,7 @@ - + @@ -499,10 +500,10 @@ - - - - + + + + @@ -517,8 +518,8 @@ - - + + @@ -527,26 +528,26 @@ - - - - + + + + - - + + - + - + - - + + - + @@ -561,10 +562,11 @@ + - + @@ -574,7 +576,7 @@ - + @@ -601,7 +603,7 @@ - + @@ -616,8 +618,8 @@ - - + + @@ -627,7 +629,7 @@ - + @@ -639,10 +641,11 @@ + - + @@ -650,7 +653,7 @@ - + @@ -664,7 +667,7 @@ - + @@ -685,17 +688,10 @@ - - - - - - - - + @@ -722,6 +718,21 @@ + + + + + + + + + + + + + + + diff --git a/service-stubs/identity/org.wso2.carbon.idp.mgt.stub/src/main/resources/IdentityProviderMgtService.wsdl b/service-stubs/identity/org.wso2.carbon.idp.mgt.stub/src/main/resources/IdentityProviderMgtService.wsdl index fbd3a77223f8..577075bc2c0f 100644 --- a/service-stubs/identity/org.wso2.carbon.idp.mgt.stub/src/main/resources/IdentityProviderMgtService.wsdl +++ b/service-stubs/identity/org.wso2.carbon.idp.mgt.stub/src/main/resources/IdentityProviderMgtService.wsdl @@ -316,29 +316,25 @@ - + - + - + - + - - - - - - + - + + @@ -354,25 +350,29 @@ - + - + - + - + - + + + + + + - - + @@ -407,13 +407,12 @@ - - - - - - - + + + + + +