package org.exoplatform.services.organization.idm; /* * JBoss, a division of Red Hat * Copyright 2010, Red Hat Middleware, LLC, and individual contributors as indicated * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; /* * @author <a href="mailto:boleslaw.dawidowicz at redhat.com">Boleslaw Dawidowicz</a> */ public class Config { private Map<String, String> groupTypeMappings = new HashMap<String, String>(); private boolean useParentIdAsGroupType = false; private boolean passwordAsAttribute = false; private String defaultGroupType = "GTN_GROUP_TYPE"; private String rootGroupName = "GTN_ROOT_GROUP"; private String pathSeparator = "."; private String slashReplacement = "@_@_@"; private boolean forceMembershipOfMappedTypes = false; private String associationMembershipType; private List<String> ignoreMappedMembershipTypeGroupList = new ArrayList<String>(); private boolean useJTA = false; private boolean sortGroups = true; private boolean sortMemberships = true; private boolean countPaginatedUsers = true; private boolean filterDisabledUsersInQueries = true; private boolean skipPaginationInMembershipQuery = false; private boolean updateLastLoginTimeAfterAuthentication = true; public Config() { } public String getGroupType(String parentId) { if (parentId == null || parentId.length() == 0) { parentId = "/"; } if (!useParentIdAsGroupType) { String type = _getGroupType(parentId, true, true, true); if (type != null) { return type; } return getDefaultGroupType(); } // Search for exact match in mappings String type = _getGroupType(parentId, false, true, true); // If not then check for inherited type if (type == null) { type = _getGroupType(parentId, true, false, true); } // If not then prepare type from this id if (type == null) { type = convertType(parentId); } return type; } private String _getGroupType(String parentId, boolean checkParents, boolean matchExact, boolean matchInherited) { if (matchExact && getGroupTypeMappings().keySet().contains(parentId)) { return getGroupTypeMappings().get(parentId); } String id = !parentId.equals("/") ? parentId + "/*" : "/*"; if (matchInherited && getGroupTypeMappings().keySet().contains(id)) { return getGroupTypeMappings().get(id); } if (checkParents && !parentId.equals("/") && parentId.contains("/")) { // Check if any mapping that contains '/*' match this id for (String key : groupTypeMappings.keySet()) { id = key; if (id.endsWith("/*")) { id = id.substring(0, id.length() - 2); } else { continue; } if (parentId.startsWith(id)) { return groupTypeMappings.get(key); } } } return null; } public String getParentId(String type) { for (Map.Entry<String, String> entry : groupTypeMappings.entrySet()) { if (entry.getValue().equals(type)) { return entry.getKey(); } } return null; } public boolean isIgnoreMappedMembershipTypeForGroup(String groupId) { if ("/".equals(groupId)) { return false; } String parentId = groupId.substring(0, groupId.lastIndexOf("/")); for (String id : ignoreMappedMembershipTypeGroupList) { // Check if any mapping that contains '/*' match this id if (id.endsWith("/*")) { id = id.substring(0, id.length() - 2); // Check exact equality case } else if (id.equals(groupId)) { return true; } else { continue; } if (parentId.startsWith(id)) { return true; } } return false; } public String getPLIDMGroupName(String gtnGroupName) { return gtnGroupName.replaceAll(getSlashReplacement(), "/"); } public String getGtnGroupName(String plidmGroupName) { return plidmGroupName.replaceAll("/", getSlashReplacement()); } Set<String> getTypes(String id) { HashSet<String> types = new HashSet<String>(); for (String key : groupTypeMappings.keySet()) { if (key.equals(id) || key.equals(id + "/*")) { types.add(groupTypeMappings.get(key)); } } return types; } Set<String> getAllTypes() { HashSet<String> types = new HashSet<String>(groupTypeMappings.values()); return types; } private String convertType(String type) { return type.replaceAll("/", pathSeparator); } public boolean isUseParentIdAsGroupType() { return useParentIdAsGroupType; } public void setUseParentIdAsGroupType(boolean useParentIdAsGroupType) { this.useParentIdAsGroupType = useParentIdAsGroupType; } public String getDefaultGroupType() { return defaultGroupType; } public void setDefaultGroupType(String defaultGroupType) { this.defaultGroupType = defaultGroupType; } public String getRootGroupName() { return rootGroupName; } public void setRootGroupName(String rootGroupName) { this.rootGroupName = rootGroupName; } public void setGroupTypeMappings(Map<String, String> groupTypeMappings) { this.groupTypeMappings = groupTypeMappings; } public Map<String, String> getGroupTypeMappings() { return groupTypeMappings; } public boolean isPasswordAsAttribute() { return passwordAsAttribute; } public void setPasswordAsAttribute(boolean passwordAsAttribute) { this.passwordAsAttribute = passwordAsAttribute; } public String getPathSeparator() { return pathSeparator; } public void setPathSeparator(String pathSeparator) { this.pathSeparator = pathSeparator; } public boolean isForceMembershipOfMappedTypes() { return forceMembershipOfMappedTypes; } public void setForceMembershipOfMappedTypes(boolean forceMembershipOfMappedTypes) { this.forceMembershipOfMappedTypes = forceMembershipOfMappedTypes; } public String getAssociationMembershipType() { return associationMembershipType; } public void setAssociationMembershipType(String associationMembershipType) { this.associationMembershipType = associationMembershipType; } public List<String> getIgnoreMappedMembershipTypeGroupList() { return ignoreMappedMembershipTypeGroupList; } public void setIgnoreMappedMembershipTypeGroupList(List<String> ignoreMappedMembershipTypeGroupList) { this.ignoreMappedMembershipTypeGroupList = ignoreMappedMembershipTypeGroupList; } public boolean isUseJTA() { return useJTA; } public void setUseJTA(boolean useJTA) { this.useJTA = useJTA; } public String getSlashReplacement() { return slashReplacement; } public void setSlashReplacement(String slashReplacement) { this.slashReplacement = slashReplacement; } public boolean isSortGroups() { return sortGroups; } public void setSortGroups(boolean sortGroups) { this.sortGroups = sortGroups; } public boolean isSortMemberships() { return sortMemberships; } public void setSortMemberships(boolean sortMemberships) { this.sortMemberships = sortMemberships; } public boolean isCountPaginatedUsers() { return countPaginatedUsers; } public void setCountPaginatedUsers(boolean countPaginatedUsers) { this.countPaginatedUsers = countPaginatedUsers; } public boolean isFilterDisabledUsersInQueries() { return filterDisabledUsersInQueries; } public void setFilterDisabledUsersInQueries(boolean filterDisabledUsersInQueries) { this.filterDisabledUsersInQueries = filterDisabledUsersInQueries; } public boolean isSkipPaginationInMembershipQuery() { return skipPaginationInMembershipQuery; } public void setSkipPaginationInMembershipQuery(boolean skipPaginationInMembershipQuery) { this.skipPaginationInMembershipQuery = skipPaginationInMembershipQuery; } public boolean isUpdateLastLoginTimeAfterAuthentication() { return updateLastLoginTimeAfterAuthentication; } public void setUpdateLastLoginTimeAfterAuthentication(boolean updateLastLoginTimeAfterAuthentication) { this.updateLastLoginTimeAfterAuthentication = updateLastLoginTimeAfterAuthentication; } }