001/* 002 * (C) Copyright 2011 Nuxeo SA (http://nuxeo.com/) and contributors. 003 * 004 * All rights reserved. This program and the accompanying materials 005 * are made available under the terms of the GNU Lesser General Public License 006 * (LGPL) version 2.1 which accompanies this distribution, and is available at 007 * http://www.gnu.org/licenses/lgpl.html 008 * 009 * This library is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 * Lesser General Public License for more details. 013 * 014 * Contributors: 015 * bjalon 016 */ 017package org.nuxeo.ecm.platform.usermanager; 018 019import static org.nuxeo.ecm.directory.localconfiguration.DirectoryConfigurationConstants.DIRECTORY_CONFIGURATION_FACET; 020 021import java.io.Serializable; 022import java.util.Map; 023import java.util.Set; 024 025import org.apache.commons.logging.Log; 026import org.apache.commons.logging.LogFactory; 027import org.nuxeo.ecm.core.api.DocumentModel; 028import org.nuxeo.ecm.core.api.NuxeoException; 029import org.nuxeo.ecm.core.api.localconfiguration.LocalConfigurationService; 030import org.nuxeo.ecm.directory.localconfiguration.DirectoryConfiguration; 031import org.nuxeo.runtime.api.Framework; 032 033/** 034 * @author bjalon 035 */ 036public class DefaultUserMultiTenantManagement implements UserMultiTenantManagement { 037 038 protected static final Log log = LogFactory.getLog(DefaultUserMultiTenantManagement.class); 039 040 protected static final String SUFFIX_SEPARATOR = "-"; 041 042 protected String getDirectorySuffix(DocumentModel documentContext) { 043 LocalConfigurationService localConfigurationService = Framework.getService(LocalConfigurationService.class); 044 DirectoryConfiguration configuration = localConfigurationService.getConfiguration(DirectoryConfiguration.class, 045 DIRECTORY_CONFIGURATION_FACET, documentContext); 046 if (configuration != null && configuration.getDirectorySuffix() != null) { 047 return SUFFIX_SEPARATOR + configuration.getDirectorySuffix(); 048 } 049 return null; 050 } 051 052 @Override 053 public void queryTransformer(UserManager um, Map<String, Serializable> filter, Set<String> fulltext, 054 DocumentModel context) { 055 String groupId = um.getGroupIdField(); 056 if (filter == null || fulltext == null) { 057 throw new NuxeoException("Filter and Fulltext must be not null"); 058 } 059 060 if (getDirectorySuffix(context) == null) { 061 log.debug("Directory Local Configuration is null, don't need to filter"); 062 return; 063 } 064 065 String groupIdSuffix = getDirectorySuffix(context); 066 067 if (!filter.containsKey(groupId)) { 068 log.debug("no filter on group id, need to filter with the directory local " + "configuration suffix : " 069 + groupId + " = %" + groupIdSuffix); 070 filter.put(groupId, "%" + groupIdSuffix); 071 fulltext.add(groupId); 072 return; 073 } 074 075 if (!(filter.get(groupId) instanceof String)) { 076 throw new UnsupportedOperationException("Filter value on " + "group id is not a string : " 077 + filter.get(groupId)); 078 } 079 080 String filterIdValue = (String) filter.get(um.getGroupIdField()); 081 filter.put(groupId, filterIdValue + groupIdSuffix); 082 } 083 084 @Override 085 public DocumentModel groupTransformer(UserManager um, DocumentModel group, DocumentModel context) 086 { 087 if (context == null) { 088 return group; 089 } 090 String groupIdValue = group.getPropertyValue(um.getGroupIdField()) + getDirectorySuffix(context); 091 group.setPropertyValue(um.getGroupIdField(), groupIdValue); 092 return group; 093 } 094 095 @Override 096 public String groupnameTranformer(UserManager um, String groupname, DocumentModel context) { 097 String suffix = getDirectorySuffix(context); 098 if (suffix != null) { 099 groupname += suffix; 100 } 101 return groupname; 102 } 103}