/*
* (C) Copyright 2006-2016 Nuxeo SA (http://nuxeo.com/) and others.
*
* Licensed 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.
*
* Contributors:
* Florent Guillaume
*/
package org.nuxeo.ecm.platform.usermanager;
import java.io.Serializable;
import java.security.Principal;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.nuxeo.ecm.core.api.DocumentModel;
import org.nuxeo.ecm.core.api.DocumentModelList;
import org.nuxeo.ecm.core.api.NuxeoGroup;
import org.nuxeo.ecm.core.api.NuxeoPrincipal;
import org.nuxeo.ecm.core.api.security.ACP;
import org.nuxeo.ecm.core.api.security.SecurityConstants;
import org.nuxeo.runtime.services.event.Event;
/**
* @author Florent Guillaume
*/
public class FakeUserManagerImpl implements UserManager {
private static final long serialVersionUID = 1L;
String userListingMode;
String groupListingMode;
List<String> defaultAdministratorIds;
List<String> administratorsGroups;
String defaultGroup;
String userSortField;
String groupSortField;
String userDirectoryName;
String userEmailField;
Map<String, MatchType> userSearchFields;
Pattern userPasswordPattern;
String groupDirectoryName;
String groupMembersField;
Map<String, MatchType> groupSearchFields;
String groupSubGroupsField;
String groupParentGroupsField;
VirtualUser anonymousUser;
final Map<String, VirtualUserDescriptor> virtualUsers;
public FakeUserManagerImpl() {
virtualUsers = new HashMap<>();
}
@Override
public String getUserListingMode() {
return userListingMode;
}
public void setUserListingMode(String userListingMode) {
this.userListingMode = userListingMode;
}
@Override
public String getGroupListingMode() {
return groupListingMode;
}
public void setGroupListingMode(String groupListingMode) {
this.groupListingMode = groupListingMode;
}
@Override
public String getDefaultGroup() {
return defaultGroup;
}
public void setDefaultGroup(String defaultGroup) {
this.defaultGroup = defaultGroup;
}
@Override
public String getUserSortField() {
return userSortField;
}
public void setUserSortField(String sortField) {
userSortField = sortField;
}
public void setGroupSortField(String sortField) {
groupSortField = sortField;
}
public void setUserDirectoryName(String userDirectoryName) {
this.userDirectoryName = userDirectoryName;
}
@Override
public String getUserDirectoryName() {
return userDirectoryName;
}
public void setUserEmailField(String userEmailField) {
this.userEmailField = userEmailField;
}
@Override
public String getUserEmailField() {
return userEmailField;
}
public void setUserSearchFields(Set<String> userSearchFields) {
this.userSearchFields = new LinkedHashMap<>();
for (String searchField : userSearchFields) {
this.userSearchFields.put(searchField, MatchType.SUBSTRING);
}
}
public void setUserSearchFields(Map<String, MatchType> userSearchFields) {
this.userSearchFields = userSearchFields;
}
@Override
public Set<String> getUserSearchFields() {
return userSearchFields.keySet();
}
@Override
public Set<String> getGroupSearchFields() {
return groupSearchFields.keySet();
}
public void setGroupDirectoryName(String groupDirectoryName) {
this.groupDirectoryName = groupDirectoryName;
}
@Override
public String getGroupDirectoryName() {
return groupDirectoryName;
}
public void setGroupMembersField(String groupMembersField) {
this.groupMembersField = groupMembersField;
}
@Override
public String getGroupMembersField() {
return groupMembersField;
}
public void setGroupSubGroupsField(String groupSubGroupsField) {
this.groupSubGroupsField = groupSubGroupsField;
}
@Override
public String getGroupSubGroupsField() {
return groupSubGroupsField;
}
public void setGroupParentGroupsField(String groupParentGroupsField) {
this.groupParentGroupsField = groupParentGroupsField;
}
@Override
public String getGroupParentGroupsField() {
return groupParentGroupsField;
}
@Override
public Boolean areGroupsReadOnly() {
throw new UnsupportedOperationException();
}
@Override
public Boolean areUsersReadOnly() {
throw new UnsupportedOperationException();
}
@Override
public boolean checkUsernamePassword(String username, String password) {
throw new UnsupportedOperationException();
}
@Override
public boolean validatePassword(String password) {
if (userPasswordPattern == null) {
return true;
} else {
Matcher userPasswordMatcher = userPasswordPattern.matcher(password);
return userPasswordMatcher.find();
}
}
@Override
public List<String> getGroupsInGroup(String parentId) {
throw new UnsupportedOperationException();
}
@Override
public NuxeoPrincipal getPrincipal(String username) {
NuxeoPrincipalImpl principal = new NuxeoPrincipalImpl(SecurityConstants.ADMINISTRATOR, false, true);
principal.setGroups(Collections.singletonList(SecurityConstants.ADMINISTRATORS));
principal.setEmail("admin@example.com");
return principal;
}
@Override
public List<String> getTopLevelGroups() {
throw new UnsupportedOperationException();
}
@Override
public List<String> getUsersInGroup(String groupId) {
throw new UnsupportedOperationException();
}
@Override
public List<String> getUsersInGroupAndSubGroups(String groupId) {
throw new UnsupportedOperationException();
}
@Override
public DocumentModelList searchGroups(String pattern) {
throw new UnsupportedOperationException();
}
@Override
public List<NuxeoPrincipal> searchPrincipals(String pattern) {
throw new UnsupportedOperationException();
}
@Override
public Pattern getUserPasswordPattern() {
return userPasswordPattern;
}
public void setUserPasswordPattern(Pattern userPasswordPattern) {
this.userPasswordPattern = userPasswordPattern;
}
public void setAnonymousUser(VirtualUser anonymousUser) {
this.anonymousUser = anonymousUser;
}
public void setVirtualUsers(Map<String, VirtualUserDescriptor> virtualUsers) {
this.virtualUsers.clear();
if (virtualUsers != null) {
this.virtualUsers.putAll(virtualUsers);
}
}
@Override
public String getAnonymousUserId() {
if (anonymousUser == null) {
return null;
}
return anonymousUser.getId();
}
@Override
public String getDigestAuthDirectory() {
return null;
}
@Override
public String getDigestAuthRealm() {
return null;
}
@Override
public void setConfiguration(UserManagerDescriptor descriptor) {
setDefaultGroup(descriptor.defaultGroup);
defaultAdministratorIds = descriptor.defaultAdministratorIds;
administratorsGroups = descriptor.administratorsGroups;
setUserSortField(descriptor.userSortField);
setGroupSortField(descriptor.groupSortField);
setUserListingMode(descriptor.userListingMode);
setGroupListingMode(descriptor.groupListingMode);
setUserDirectoryName(descriptor.userDirectoryName);
setUserEmailField(descriptor.userEmailField);
setUserSearchFields(descriptor.userSearchFields);
setUserPasswordPattern(descriptor.userPasswordPattern);
setGroupDirectoryName(descriptor.groupDirectoryName);
setGroupMembersField(descriptor.groupMembersField);
setGroupSubGroupsField(descriptor.groupSubGroupsField);
setGroupParentGroupsField(descriptor.groupParentGroupsField);
setAnonymousUser(descriptor.anonymousUser);
setVirtualUsers(descriptor.virtualUsers);
}
@Override
public DocumentModel getBareUserModel() {
throw new UnsupportedOperationException();
}
@Override
public DocumentModel createGroup(DocumentModel groupModel) {
throw new UnsupportedOperationException();
}
@Override
public DocumentModel createUser(DocumentModel userModel) {
throw new UnsupportedOperationException();
}
@Override
public void deleteGroup(DocumentModel groupModel) {
throw new UnsupportedOperationException();
}
@Override
public void deleteGroup(String groupId) {
throw new UnsupportedOperationException();
}
@Override
public void deleteUser(DocumentModel userModel) {
throw new UnsupportedOperationException();
}
@Override
public void deleteUser(String userId) {
throw new UnsupportedOperationException();
}
@Override
public DocumentModel getBareGroupModel() {
throw new UnsupportedOperationException();
}
@Override
public NuxeoGroup getGroup(String groupName) {
throw new UnsupportedOperationException();
}
@Override
public List<String> getGroupIds() {
throw new UnsupportedOperationException();
}
@Override
public List<String> getUserIds() {
throw new UnsupportedOperationException();
}
@Override
public DocumentModelList searchGroups(Map<String, Serializable> filter, Set<String> fulltext) {
throw new UnsupportedOperationException();
}
@Override
public DocumentModelList searchUsers(Map<String, Serializable> filter, Set<String> fulltext) {
throw new UnsupportedOperationException();
}
@Override
public DocumentModelList searchUsers(String pattern) {
throw new UnsupportedOperationException();
}
@Override
public void updateGroup(DocumentModel groupModel) {
throw new UnsupportedOperationException();
}
@Override
public void updateUser(DocumentModel userModel) {
throw new UnsupportedOperationException();
}
@Override
public DocumentModel getGroupModel(String groupName) {
throw new UnsupportedOperationException();
}
@Override
public DocumentModel getUserModel(String userName) {
throw new UnsupportedOperationException();
}
@Override
public String getGroupIdField() {
return "groupname";
}
@Override
public String getGroupLabelField() {
return "grouplabel";
}
@Override
public String getGroupSchemaName() {
return "group";
}
@Override
public String getUserIdField() {
return "username";
}
@Override
public String getUserSchemaName() {
return "user";
}
@Override
public List<String> getAdministratorsGroups() {
throw new UnsupportedOperationException();
}
@Override
public String[] getUsersForPermission(String perm, ACP acp) {
throw new UnsupportedOperationException();
}
@Override
public Principal authenticate(String name, String password) {
return checkUsernamePassword(name, password) ? getPrincipal(name) : null;
}
@Override
public void handleEvent(Event event) {
}
@Override
public List<String> getAncestorGroups(String groupId) {
throw new UnsupportedOperationException();
}
@Override
public void notifyUserChanged(String userName, String eventId) {
throw new UnsupportedOperationException();
}
@Override
public void notifyGroupChanged(String groupName, String eventId, List<String> ancestorGroupNames) {
throw new UnsupportedOperationException();
}
}