Search in sources :

Example 51 with Claim

use of org.wso2.carbon.identity.application.common.model.xsd.Claim in project carbon-identity-framework by wso2.

the class ProvisioningUtil method getMappedClaims.

public static Map<ClaimMapping, List<String>> getMappedClaims(ClaimMapping[] outboundClaimMappings, Map<String, String> inboundClaimValueMap, String inboundClaimMappingDialect, Map<ClaimMapping, List<String>> outboundClaimValueMappings, String tenantDomain) throws IdentityApplicationManagementException {
    try {
        if (MapUtils.isEmpty(inboundClaimValueMap)) {
            // the out-bound claim mapping.
            if (outboundClaimMappings != null && outboundClaimMappings.length > 0) {
                for (ClaimMapping mapping : outboundClaimMappings) {
                    if (mapping.getDefaultValue() != null) {
                        outboundClaimValueMappings.put(mapping, Arrays.asList(new String[] { mapping.getDefaultValue() }));
                    }
                }
            }
            return outboundClaimValueMappings;
        }
        if (outboundClaimMappings == null || outboundClaimMappings.length == 0) {
            // we cannot find out-bound claim dialect - return what we have.
            return outboundClaimValueMappings;
        }
        Map<String, String> claimMap = null;
        // out-bound is not in wso2 carbon dialect. we need to find how it maps to wso2
        // carbon dialect.
        Map<String, String> carbonToInboundClaimMapping = null;
        // we only know the dialect - it is standard claim dialect.
        // returns the carbon claim mapping corresponding to claims in the the in-bound
        // provisioning request with carbon in-bound claim uris as the key.
        carbonToInboundClaimMapping = ClaimMetadataHandler.getInstance().getMappingsMapFromOtherDialectToCarbon(inboundClaimMappingDialect, inboundClaimValueMap.keySet(), tenantDomain, true);
        claimMap = new HashMap<String, String>();
        Map<String, String> outboundClaimDefaultValues = new HashMap<String, String>();
        for (ClaimMapping outboundClaimMapping : outboundClaimMappings) {
            String inboundClaim = null;
            if (outboundClaimMapping.getLocalClaim() != null) {
                inboundClaim = carbonToInboundClaimMapping.get(outboundClaimMapping.getLocalClaim().getClaimUri());
            }
            claimMap.put(outboundClaimMapping.getRemoteClaim().getClaimUri(), inboundClaim);
            outboundClaimDefaultValues.put(outboundClaimMapping.getRemoteClaim().getClaimUri(), outboundClaimMapping.getDefaultValue());
        }
        if (claimMap.isEmpty()) {
            return outboundClaimValueMappings;
        }
        for (Iterator<Map.Entry<String, String>> iterator = claimMap.entrySet().iterator(); iterator.hasNext(); ) {
            Map.Entry<String, String> entry = iterator.next();
            String outboundClaimUri = entry.getKey();
            String inboundClaimUri = entry.getValue();
            if (inboundClaimUri != null && inboundClaimValueMap.get(inboundClaimUri) != null) {
                outboundClaimValueMappings.put(ClaimMapping.build(inboundClaimUri, outboundClaimUri, outboundClaimDefaultValues.get(outboundClaimUri), false), Arrays.asList(new String[] { inboundClaimValueMap.get(inboundClaimUri) }));
            } else {
                outboundClaimValueMappings.put(ClaimMapping.build(inboundClaimUri, outboundClaimUri, outboundClaimDefaultValues.get(outboundClaimUri), false), Arrays.asList(new String[] { outboundClaimDefaultValues.get(outboundClaimUri) }));
            }
        }
    } catch (Exception e) {
        throw new IdentityApplicationManagementException("Error while loading claim mappings.", e);
    }
    return outboundClaimValueMappings;
}
Also used : ClaimMapping(org.wso2.carbon.identity.application.common.model.ClaimMapping) HashMap(java.util.HashMap) IdentityApplicationManagementException(org.wso2.carbon.identity.application.common.IdentityApplicationManagementException) HashMap(java.util.HashMap) Map(java.util.Map) IdentityApplicationManagementException(org.wso2.carbon.identity.application.common.IdentityApplicationManagementException)

Example 52 with Claim

use of org.wso2.carbon.identity.application.common.model.xsd.Claim in project carbon-identity-framework by wso2.

the class ProvisioningUtil method getMappedClaims.

public static Map<ClaimMapping, List<String>> getMappedClaims(String outboundClaimDialect, Map<String, String> inboundClaimValueMap, String inboundClaimMappingDialect, Map<ClaimMapping, List<String>> outboundClaimValueMappings, String tenantDomain) throws IdentityApplicationManagementException {
    try {
        if (MapUtils.isEmpty(inboundClaimValueMap)) {
            return outboundClaimValueMappings;
        }
        Map<String, String> claimMap = null;
        if (IdentityApplicationConstants.WSO2CARBON_CLAIM_DIALECT.equals(inboundClaimMappingDialect)) {
            // in-bound dialect is in default carbon dialect.
            // otherDialectURI, carbonClaimURIs, tenantDomain, carbonDialectAsKey
            // this map will have out-bound dialect as the key.
            claimMap = ClaimMetadataHandler.getInstance().getMappingsMapFromOtherDialectToCarbon(outboundClaimDialect, null, tenantDomain, true);
        } else {
            // out-bound is not in wso2 carbon dialect. we need to find how it maps to wso2
            // carbon dialect.
            Map<String, String> inboundToCarbonClaimMaping = null;
            Map<String, String> outBoundToCarbonClaimMappping = null;
            // this will return back the mapped carbon dialect for the in-bound claims in the
            // in-bound provisioning request.
            // the key of this map will be in in-bound claim dialect.
            inboundToCarbonClaimMaping = ClaimMetadataHandler.getInstance().getMappingsMapFromOtherDialectToCarbon(inboundClaimMappingDialect, inboundClaimValueMap.keySet(), tenantDomain, false);
            // we only know the dialect - it is standard claim dialect.
            // this will return back all the wso2 carbon claims mapped to the out-bound dialect.
            // we send null here because we do not know the required claims for out-bound
            // provisioning.
            // the key of this map will be in carbon dialect.
            outBoundToCarbonClaimMappping = ClaimMetadataHandler.getInstance().getMappingsMapFromOtherDialectToCarbon(outboundClaimDialect, null, tenantDomain, true);
            // in-bound dialect / out-bound dialect.
            claimMap = new HashMap<String, String>();
            for (Iterator<Map.Entry<String, String>> iterator = inboundToCarbonClaimMaping.entrySet().iterator(); iterator.hasNext(); ) {
                Map.Entry<String, String> entry = iterator.next();
                String outboundClaim = outBoundToCarbonClaimMappping.get(entry.getValue());
                if (outboundClaim != null) {
                    claimMap.put(entry.getKey(), outboundClaim);
                }
            }
        }
        if (claimMap.isEmpty()) {
            return outboundClaimValueMappings;
        }
        // through the in-bound provisioning claim map.
        for (Iterator<Map.Entry<String, String>> iterator = claimMap.entrySet().iterator(); iterator.hasNext(); ) {
            Map.Entry<String, String> entry = iterator.next();
            String outboundClaimUri = entry.getValue();
            String inboundClaimUri = entry.getKey();
            String claimValue = null;
            if (outboundClaimUri != null) {
                claimValue = inboundClaimValueMap.get(inboundClaimUri);
            }
            if (claimValue != null) {
                outboundClaimValueMappings.put(ClaimMapping.build(inboundClaimUri, outboundClaimUri, null, false), Arrays.asList(new String[] { claimValue }));
            }
        }
    } catch (Exception e) {
        throw new IdentityApplicationManagementException("Error while loading claim mappings.", e);
    }
    return outboundClaimValueMappings;
}
Also used : IdentityApplicationManagementException(org.wso2.carbon.identity.application.common.IdentityApplicationManagementException) HashMap(java.util.HashMap) Map(java.util.Map) IdentityApplicationManagementException(org.wso2.carbon.identity.application.common.IdentityApplicationManagementException)

Example 53 with Claim

use of org.wso2.carbon.identity.application.common.model.xsd.Claim in project carbon-identity-framework by wso2.

the class OutboundProvisioningManager method getUserClaims.

/**
 * @param userName
 * @param tenantDomain
 * @return
 * @throws CarbonException
 * @throws UserStoreException
 */
private Map<String, String> getUserClaims(String userName, String tenantDomain) throws CarbonException, UserStoreException {
    Map<String, String> inboundAttributes = new HashMap<>();
    RegistryService registryService = IdentityProvisionServiceComponent.getRegistryService();
    RealmService realmService = IdentityProvisionServiceComponent.getRealmService();
    UserRealm realm = AnonymousSessionUtil.getRealmByTenantDomain(registryService, realmService, tenantDomain);
    UserStoreManager userstore = null;
    userstore = realm.getUserStoreManager();
    Claim[] claimArray = null;
    try {
        claimArray = userstore.getUserClaimValues(userName, null);
    } catch (UserStoreException e) {
        if (e.getMessage().contains("UserNotFound")) {
            if (log.isDebugEnabled()) {
                log.debug("User " + userName + " not found in user store");
            }
        } else {
            throw e;
        }
    }
    if (claimArray != null) {
        for (Claim claim : claimArray) {
            inboundAttributes.put(claim.getClaimUri(), claim.getValue());
        }
    }
    return inboundAttributes;
}
Also used : UserRealm(org.wso2.carbon.user.core.UserRealm) HashMap(java.util.HashMap) RealmService(org.wso2.carbon.user.core.service.RealmService) UserStoreException(org.wso2.carbon.user.api.UserStoreException) UserStoreManager(org.wso2.carbon.user.core.UserStoreManager) RegistryService(org.wso2.carbon.registry.core.service.RegistryService) Claim(org.wso2.carbon.user.core.claim.Claim)

Example 54 with Claim

use of org.wso2.carbon.identity.application.common.model.xsd.Claim in project carbon-identity-framework by wso2.

the class DefaultInboundUserProvisioningListener method doPostUpdateRoleListOfUser.

@Override
public boolean doPostUpdateRoleListOfUser(String userName, String[] deletedRoles, String[] newRoles, UserStoreManager userStoreManager) throws UserStoreException {
    if (!isEnable()) {
        return true;
    }
    String[] roleList = userStoreManager.getRoleListOfUser(userName);
    Map<String, String> inboundAttributes = new HashMap<>();
    Map<ClaimMapping, List<String>> outboundAttributes = new HashMap<>();
    if (userName != null) {
        outboundAttributes.put(ClaimMapping.build(IdentityProvisioningConstants.USERNAME_CLAIM_URI, null, null, false), Arrays.asList(new String[] { userName }));
    }
    if (roleList != null && roleList.length > 0) {
        outboundAttributes.put(ClaimMapping.build(IdentityProvisioningConstants.GROUP_CLAIM_URI, null, null, false), Arrays.asList(roleList));
    }
    if (newRoles != null && roleList.length > 0) {
        outboundAttributes.put(ClaimMapping.build(IdentityProvisioningConstants.NEW_GROUP_CLAIM_URI, null, null, false), Arrays.asList(newRoles));
    }
    if (deletedRoles != null && deletedRoles.length > 0) {
        outboundAttributes.put(ClaimMapping.build(IdentityProvisioningConstants.DELETED_GROUP_CLAIM_URI, null, null, false), Arrays.asList(deletedRoles));
    }
    String domainName = UserCoreUtil.getDomainName(userStoreManager.getRealmConfiguration());
    if (log.isDebugEnabled()) {
        log.debug("Adding domain name : " + domainName + " to user : " + userName);
    }
    String domainAwareName = UserCoreUtil.addDomainToName(userName, domainName);
    ProvisioningEntity provisioningEntity = new ProvisioningEntity(ProvisioningEntityType.USER, domainAwareName, ProvisioningOperation.PUT, outboundAttributes);
    Claim[] claimArray = null;
    try {
        claimArray = userStoreManager.getUserClaimValues(userName, null);
    } catch (UserStoreException e) {
        if (e.getMessage().contains("UserNotFound")) {
            if (log.isDebugEnabled()) {
                log.debug("User " + userName + " not found in user store");
            }
        } else {
            throw e;
        }
    }
    if (claimArray != null) {
        for (Claim claim : claimArray) {
            inboundAttributes.put(claim.getClaimUri(), claim.getValue());
        }
    }
    provisioningEntity.setInboundAttributes(inboundAttributes);
    String tenantDomainName = CarbonContext.getThreadLocalCarbonContext().getTenantDomain();
    ThreadLocalProvisioningServiceProvider threadLocalServiceProvider;
    threadLocalServiceProvider = IdentityApplicationManagementUtil.getThreadLocalProvisioningServiceProvider();
    if (threadLocalServiceProvider != null) {
        String serviceProvider = threadLocalServiceProvider.getServiceProviderName();
        tenantDomainName = threadLocalServiceProvider.getTenantDomain();
        if (threadLocalServiceProvider.getServiceProviderType() == ProvisioningServiceProviderType.OAUTH) {
            try {
                serviceProvider = ApplicationManagementService.getInstance().getServiceProviderNameByClientId(threadLocalServiceProvider.getServiceProviderName(), IdentityApplicationConstants.OAuth2.NAME, tenantDomainName);
            } catch (IdentityApplicationManagementException e) {
                log.error("Error while provisioning", e);
                return true;
            }
        }
        // call framework method to provision the user.
        OutboundProvisioningManager.getInstance().provision(provisioningEntity, serviceProvider, threadLocalServiceProvider.getClaimDialect(), tenantDomainName, threadLocalServiceProvider.isJustInTimeProvisioning());
    } else {
        // call framework method to provision the user.
        OutboundProvisioningManager.getInstance().provision(provisioningEntity, ApplicationConstants.LOCAL_SP, IdentityProvisioningConstants.WSO2_CARBON_DIALECT, tenantDomainName, false);
    }
    return true;
}
Also used : HashMap(java.util.HashMap) IdentityApplicationManagementException(org.wso2.carbon.identity.application.common.IdentityApplicationManagementException) ProvisioningEntity(org.wso2.carbon.identity.provisioning.ProvisioningEntity) ClaimMapping(org.wso2.carbon.identity.application.common.model.ClaimMapping) UserStoreException(org.wso2.carbon.user.core.UserStoreException) List(java.util.List) ThreadLocalProvisioningServiceProvider(org.wso2.carbon.identity.application.common.model.ThreadLocalProvisioningServiceProvider) Claim(org.wso2.carbon.user.core.claim.Claim)

Example 55 with Claim

use of org.wso2.carbon.identity.application.common.model.xsd.Claim in project carbon-identity-framework by wso2.

the class DefaultInboundUserProvisioningListener method doPreAddUser.

@Override
public boolean doPreAddUser(String userName, Object credential, String[] roleList, Map<String, String> inboundAttributes, String profile, UserStoreManager userStoreManager) throws UserStoreException {
    if (!isEnable()) {
        return true;
    }
    Map<ClaimMapping, List<String>> outboundAttributes = new HashMap<>();
    if (credential != null) {
        outboundAttributes.put(ClaimMapping.build(IdentityProvisioningConstants.PASSWORD_CLAIM_URI, null, null, false), Arrays.asList(new String[] { ((StringBuffer) credential).toString() }));
    }
    if (userName != null) {
        outboundAttributes.put(ClaimMapping.build(IdentityProvisioningConstants.USERNAME_CLAIM_URI, null, null, false), Arrays.asList(new String[] { userName }));
    }
    if (roleList != null) {
        outboundAttributes.put(ClaimMapping.build(IdentityProvisioningConstants.GROUP_CLAIM_URI, null, null, false), Arrays.asList(roleList));
    }
    String domainName = UserCoreUtil.getDomainName(userStoreManager.getRealmConfiguration());
    if (log.isDebugEnabled()) {
        log.debug("Adding domain name : " + domainName + " to user : " + userName);
    }
    String domainAwareName = UserCoreUtil.addDomainToName(userName, domainName);
    ProvisioningEntity provisioningEntity = new ProvisioningEntity(ProvisioningEntityType.USER, domainAwareName, ProvisioningOperation.POST, outboundAttributes);
    // set the in-bound attribute list.in this particular case this is in the wso2.org claim
    // dialect.
    provisioningEntity.setInboundAttributes(inboundAttributes);
    String tenantDomainName = CarbonContext.getThreadLocalCarbonContext().getTenantDomain();
    ThreadLocalProvisioningServiceProvider threadLocalServiceProvider;
    threadLocalServiceProvider = IdentityApplicationManagementUtil.getThreadLocalProvisioningServiceProvider();
    if (threadLocalServiceProvider != null) {
        String serviceProvider = threadLocalServiceProvider.getServiceProviderName();
        tenantDomainName = threadLocalServiceProvider.getTenantDomain();
        if (threadLocalServiceProvider.getServiceProviderType() == ProvisioningServiceProviderType.OAUTH) {
            try {
                serviceProvider = ApplicationManagementService.getInstance().getServiceProviderNameByClientId(threadLocalServiceProvider.getServiceProviderName(), IdentityApplicationConstants.OAuth2.NAME, tenantDomainName);
            } catch (IdentityApplicationManagementException e) {
                log.error("Error while provisioning", e);
                return true;
            }
        }
        // call framework method to provision the user.
        OutboundProvisioningManager.getInstance().provision(provisioningEntity, serviceProvider, threadLocalServiceProvider.getClaimDialect(), tenantDomainName, threadLocalServiceProvider.isJustInTimeProvisioning());
    } else {
        // call framework method to provision the user.
        OutboundProvisioningManager.getInstance().provision(provisioningEntity, ApplicationConstants.LOCAL_SP, IdentityProvisioningConstants.WSO2_CARBON_DIALECT, tenantDomainName, false);
    }
    return true;
}
Also used : ClaimMapping(org.wso2.carbon.identity.application.common.model.ClaimMapping) HashMap(java.util.HashMap) IdentityApplicationManagementException(org.wso2.carbon.identity.application.common.IdentityApplicationManagementException) List(java.util.List) ThreadLocalProvisioningServiceProvider(org.wso2.carbon.identity.application.common.model.ThreadLocalProvisioningServiceProvider) ProvisioningEntity(org.wso2.carbon.identity.provisioning.ProvisioningEntity)

Aggregations

HashMap (java.util.HashMap)112 ArrayList (java.util.ArrayList)89 ClaimMapping (org.wso2.carbon.identity.application.common.model.ClaimMapping)66 UserStoreException (org.wso2.carbon.user.api.UserStoreException)65 Test (org.testng.annotations.Test)63 ClaimMetadataException (org.wso2.carbon.identity.claim.metadata.mgt.exception.ClaimMetadataException)55 Map (java.util.Map)49 PreparedStatement (java.sql.PreparedStatement)48 SQLException (java.sql.SQLException)43 LocalClaim (org.wso2.carbon.identity.claim.metadata.mgt.model.LocalClaim)34 RealmService (org.wso2.carbon.user.core.service.RealmService)30 UserRealm (org.wso2.carbon.user.core.UserRealm)29 Claim (org.wso2.carbon.user.api.Claim)28 UserStoreException (org.wso2.carbon.user.core.UserStoreException)28 UserStoreManager (org.wso2.carbon.user.core.UserStoreManager)28 ResultSet (java.sql.ResultSet)27 Connection (java.sql.Connection)25 ClaimConfig (org.wso2.carbon.identity.application.common.model.ClaimConfig)25 PrepareForTest (org.powermock.core.classloader.annotations.PrepareForTest)24 Claim (org.wso2.carbon.identity.application.common.model.Claim)24