/*
* Copyright (c) 2013, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.wso2.carbon.identity.application.authentication.framework.config.model;
import org.wso2.carbon.identity.application.common.model.ApplicationPermission;
import org.wso2.carbon.identity.application.common.model.ClaimConfig;
import org.wso2.carbon.identity.application.common.model.ClaimMapping;
import org.wso2.carbon.identity.application.common.model.LocalAndOutboundAuthenticationConfig;
import org.wso2.carbon.identity.application.common.model.PermissionsAndRoleConfig;
import org.wso2.carbon.identity.application.common.model.RoleMapping;
import org.wso2.carbon.identity.application.common.model.ServiceProvider;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
public class ApplicationConfig implements Serializable {
private static final long serialVersionUID = 8082478632322393384L;
private ServiceProvider serviceProvider = null;
private int applicationID = 0;
private String applicationName = null;
private String roleClaim = null;
private boolean alwaysSendMappedLocalSubjectId = false;
private boolean mappedSubjectIDSelected = false;
private String subjectClaimUri;
private String[] permissions = new String[0];
private Map<String, String> claimMappings = new HashMap<String, String>();
private Map<String, String> roleMappings = new HashMap<String, String>();
private Map<String, String> requestedClaims = new HashMap<String, String>();
private boolean isSaaSApp;
private boolean useTenantDomainInLocalSubjectIdentifier = true;
private boolean useUserstoreDomainInLocalSubjectIdentifier = true;
public ApplicationConfig(ServiceProvider application) {
this.serviceProvider = application;
applicationID = application.getApplicationID();
applicationName = application.getApplicationName();
isSaaSApp = application.isSaasApp();
LocalAndOutboundAuthenticationConfig outboundAuthConfig = application.getLocalAndOutBoundAuthenticationConfig();
if (outboundAuthConfig != null) {
subjectClaimUri = outboundAuthConfig.getSubjectClaimUri();
setUseTenantDomainInLocalSubjectIdentifier(outboundAuthConfig.isUseTenantDomainInLocalSubjectIdentifier());
setUseUserstoreDomainInLocalSubjectIdentifier(outboundAuthConfig
.isUseUserstoreDomainInLocalSubjectIdentifier());
}
ClaimConfig claimConfig = application.getClaimConfig();
if (claimConfig != null) {
roleClaim = claimConfig.getRoleClaimURI();
alwaysSendMappedLocalSubjectId = claimConfig.isAlwaysSendMappedLocalSubjectId();
ClaimMapping[] claimMapping = claimConfig.getClaimMappings();
requestedClaims = new HashMap<String, String>();
if (claimMapping != null && claimMapping.length > 0) {
claimMappings = new HashMap<String, String>();
for (ClaimMapping claim : claimMapping) {
if (claim.getRemoteClaim() != null
&& claim.getRemoteClaim().getClaimUri() != null) {
if (claim.getLocalClaim() != null) {
claimMappings.put(claim.getRemoteClaim().getClaimUri(), claim
.getLocalClaim().getClaimUri());
if (claim.isRequested()) {
requestedClaims.put(claim.getRemoteClaim().getClaimUri(), claim
.getLocalClaim().getClaimUri());
}
} else {
claimMappings.put(claim.getRemoteClaim().getClaimUri(), null);
if (claim.isRequested()) {
requestedClaims.put(claim.getRemoteClaim().getClaimUri(), null);
}
}
}
}
}
}
PermissionsAndRoleConfig permissionRoleConfiguration;
permissionRoleConfiguration = application.getPermissionAndRoleConfig();
if (permissionRoleConfiguration != null) {
ApplicationPermission[] permissionList = permissionRoleConfiguration.getPermissions();
if (permissionList == null) {
permissionList = new ApplicationPermission[0];
}
permissions = new String[permissionList.length];
for (int i = 0; i < permissionList.length; i++) {
ApplicationPermission permission = permissionList[i];
permissions[i] = permission.getValue();
}
RoleMapping[] tempRoleMappings = permissionRoleConfiguration.getRoleMappings();
if (tempRoleMappings != null && tempRoleMappings.length > 0) {
this.roleMappings = new HashMap<String, String>();
for (RoleMapping roleMapping : tempRoleMappings) {
this.roleMappings.put(roleMapping.getLocalRole().getLocalRoleName(),
roleMapping.getRemoteRole());
}
}
}
}
public int getApplicationID() {
return applicationID;
}
public void setApplicationID(int applicationID) {
this.applicationID = applicationID;
}
public String getApplicationName() {
return applicationName;
}
public void setApplicationName(String applicationName) {
this.applicationName = applicationName;
}
public String getRoleClaim() {
return roleClaim;
}
public void setRoleClaim(String roleClaim) {
this.roleClaim = roleClaim;
}
public String[] getPermissions() {
if (permissions != null) {
return permissions.clone();
} else {
return new String[0];
}
}
public void setPermissions(String[] permissions) {
if (permissions != null) {
this.permissions = permissions.clone();
}
}
public Map<String, String> getClaimMappings() {
return claimMappings;
}
public void setClaimMappings(Map<String, String> claimMappings) {
this.claimMappings = claimMappings;
}
public Map<String, String> getRequestedClaimMappings() {
return requestedClaims;
}
public Map<String, String> getRoleMappings() {
return roleMappings;
}
public void setRoleMappings(Map<String, String> roleMappings) {
this.roleMappings = roleMappings;
}
public boolean noClaimMapping() {
return claimMappings == null;
}
public boolean isAlwaysSendMappedLocalSubjectId() {
return alwaysSendMappedLocalSubjectId;
}
public void setAlwaysSendMappedLocalSubjectId(boolean alwaysSendMappedLocalSubjectId) {
this.alwaysSendMappedLocalSubjectId = alwaysSendMappedLocalSubjectId;
}
public boolean isMappedSubjectIDSelected() {
return mappedSubjectIDSelected;
}
public void setMappedSubjectIDSelected(boolean mappedSubjectIDSelected) {
this.mappedSubjectIDSelected = mappedSubjectIDSelected;
}
public String getSubjectClaimUri() {
return subjectClaimUri;
}
public ServiceProvider getServiceProvider() {
return serviceProvider;
}
public void setServiceProvider(ServiceProvider serviceProvider) {
this.serviceProvider = serviceProvider;
}
public boolean isSaaSApp() {
return isSaaSApp;
}
public boolean isUseTenantDomainInLocalSubjectIdentifier() {
return useTenantDomainInLocalSubjectIdentifier;
}
public void setUseTenantDomainInLocalSubjectIdentifier(boolean useTenantDomainInLocalSubjectIdentifier) {
this.useTenantDomainInLocalSubjectIdentifier = useTenantDomainInLocalSubjectIdentifier;
}
public boolean isUseUserstoreDomainInLocalSubjectIdentifier() {
return useUserstoreDomainInLocalSubjectIdentifier;
}
public void setUseUserstoreDomainInLocalSubjectIdentifier(boolean useUserstoreDomainInLocalSubjectIdentifier) {
this.useUserstoreDomainInLocalSubjectIdentifier = useUserstoreDomainInLocalSubjectIdentifier;
}
}