001/*
002 * (C) Copyright 2006-2007 Nuxeo SAS (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 *     Florent Guillaume
016 *
017 * $Id: FakeUserManagerImpl.java 28010 2007-12-07 19:23:44Z fguillaume $
018 */
019
020package org.nuxeo.ecm.platform.usermanager;
021
022import java.io.Serializable;
023import java.security.Principal;
024import java.util.Arrays;
025import java.util.HashMap;
026import java.util.LinkedHashMap;
027import java.util.List;
028import java.util.Map;
029import java.util.Set;
030import java.util.regex.Matcher;
031import java.util.regex.Pattern;
032
033import org.nuxeo.ecm.core.api.DocumentModel;
034import org.nuxeo.ecm.core.api.DocumentModelList;
035import org.nuxeo.ecm.core.api.NuxeoGroup;
036import org.nuxeo.ecm.core.api.NuxeoPrincipal;
037import org.nuxeo.ecm.core.api.security.ACP;
038import org.nuxeo.ecm.core.api.security.SecurityConstants;
039import org.nuxeo.runtime.services.event.Event;
040
041/**
042 * @author Florent Guillaume
043 */
044public class FakeUserManagerImpl implements UserManager {
045
046    private static final long serialVersionUID = 1L;
047
048    String userListingMode;
049
050    String groupListingMode;
051
052    List<String> defaultAdministratorIds;
053
054    List<String> administratorsGroups;
055
056    String defaultGroup;
057
058    String userSortField;
059
060    String groupSortField;
061
062    String userDirectoryName;
063
064    String userEmailField;
065
066    Map<String, MatchType> userSearchFields;
067
068    Pattern userPasswordPattern;
069
070    String groupDirectoryName;
071
072    String groupMembersField;
073
074    Map<String, MatchType> groupSearchFields;
075
076    String groupSubGroupsField;
077
078    String groupParentGroupsField;
079
080    VirtualUser anonymousUser;
081
082    final Map<String, VirtualUserDescriptor> virtualUsers;
083
084    public FakeUserManagerImpl() {
085        virtualUsers = new HashMap<String, VirtualUserDescriptor>();
086    }
087
088    public String getUserListingMode() {
089        return userListingMode;
090    }
091
092    public void setUserListingMode(String userListingMode) {
093        this.userListingMode = userListingMode;
094    }
095
096    public String getGroupListingMode() {
097        return groupListingMode;
098    }
099
100    public void setGroupListingMode(String groupListingMode) {
101        this.groupListingMode = groupListingMode;
102    }
103
104    public String getDefaultGroup() {
105        return defaultGroup;
106    }
107
108    public void setDefaultGroup(String defaultGroup) {
109        this.defaultGroup = defaultGroup;
110    }
111
112    public String getUserSortField() {
113        return userSortField;
114    }
115
116    public void setUserSortField(String sortField) {
117        userSortField = sortField;
118    }
119
120    public void setGroupSortField(String sortField) {
121        groupSortField = sortField;
122    }
123
124    public void setUserDirectoryName(String userDirectoryName) {
125        this.userDirectoryName = userDirectoryName;
126    }
127
128    public String getUserDirectoryName() {
129        return userDirectoryName;
130    }
131
132    public void setUserEmailField(String userEmailField) {
133        this.userEmailField = userEmailField;
134    }
135
136    public String getUserEmailField() {
137        return userEmailField;
138    }
139
140    public void setUserSearchFields(Set<String> userSearchFields) {
141        this.userSearchFields = new LinkedHashMap<String, MatchType>();
142        for (String searchField : userSearchFields) {
143            this.userSearchFields.put(searchField, MatchType.SUBSTRING);
144        }
145    }
146
147    public void setUserSearchFields(Map<String, MatchType> userSearchFields) {
148        this.userSearchFields = userSearchFields;
149    }
150
151    public Set<String> getUserSearchFields() {
152        return userSearchFields.keySet();
153    }
154
155    public Set<String> getGroupSearchFields() {
156        return groupSearchFields.keySet();
157    }
158
159    public void setGroupDirectoryName(String groupDirectoryName) {
160        this.groupDirectoryName = groupDirectoryName;
161    }
162
163    public String getGroupDirectoryName() {
164        return groupDirectoryName;
165    }
166
167    public void setGroupMembersField(String groupMembersField) {
168        this.groupMembersField = groupMembersField;
169    }
170
171    public String getGroupMembersField() {
172        return groupMembersField;
173    }
174
175    public void setGroupSubGroupsField(String groupSubGroupsField) {
176        this.groupSubGroupsField = groupSubGroupsField;
177    }
178
179    public String getGroupSubGroupsField() {
180        return groupSubGroupsField;
181    }
182
183    public void setGroupParentGroupsField(String groupParentGroupsField) {
184        this.groupParentGroupsField = groupParentGroupsField;
185    }
186
187    public String getGroupParentGroupsField() {
188        return groupParentGroupsField;
189    }
190
191    public Boolean areGroupsReadOnly() {
192        throw new UnsupportedOperationException();
193    }
194
195    public Boolean areUsersReadOnly() {
196        throw new UnsupportedOperationException();
197    }
198
199    public boolean checkUsernamePassword(String username, String password) {
200        throw new UnsupportedOperationException();
201    }
202
203    public boolean validatePassword(String password) {
204        if (userPasswordPattern == null) {
205            return true;
206        } else {
207            Matcher userPasswordMatcher = userPasswordPattern.matcher(password);
208            return userPasswordMatcher.find();
209        }
210    }
211
212    public List<String> getGroupsInGroup(String parentId) {
213        throw new UnsupportedOperationException();
214    }
215
216    public NuxeoPrincipal getPrincipal(String username) {
217        NuxeoPrincipalImpl principal = new NuxeoPrincipalImpl(SecurityConstants.ADMINISTRATOR, false, true);
218        principal.setGroups(Arrays.asList(SecurityConstants.ADMINISTRATORS));
219        principal.setEmail("admin@example.com");
220        return principal;
221    }
222
223    public List<String> getTopLevelGroups() {
224        throw new UnsupportedOperationException();
225    }
226
227    public List<String> getUsersInGroup(String groupId) {
228        throw new UnsupportedOperationException();
229    }
230
231    public List<String> getUsersInGroupAndSubGroups(String groupId) {
232        throw new UnsupportedOperationException();
233    }
234
235    public DocumentModelList searchGroups(String pattern) {
236        throw new UnsupportedOperationException();
237    }
238
239    public List<NuxeoPrincipal> searchPrincipals(String pattern) {
240        throw new UnsupportedOperationException();
241    }
242
243    public Pattern getUserPasswordPattern() {
244        return userPasswordPattern;
245    }
246
247    public void setUserPasswordPattern(Pattern userPasswordPattern) {
248        this.userPasswordPattern = userPasswordPattern;
249    }
250
251    public void setAnonymousUser(VirtualUser anonymousUser) {
252        this.anonymousUser = anonymousUser;
253    }
254
255    public void setVirtualUsers(Map<String, VirtualUserDescriptor> virtualUsers) {
256        this.virtualUsers.clear();
257        if (virtualUsers != null) {
258            this.virtualUsers.putAll(virtualUsers);
259        }
260    }
261
262    public String getAnonymousUserId() {
263        if (anonymousUser == null) {
264            return null;
265        }
266        return anonymousUser.getId();
267    }
268
269    @Override
270    public String getDigestAuthDirectory() {
271        return null;
272    }
273
274    @Override
275    public String getDigestAuthRealm() {
276        return null;
277    }
278
279    public void setConfiguration(UserManagerDescriptor descriptor) {
280        setDefaultGroup(descriptor.defaultGroup);
281        defaultAdministratorIds = descriptor.defaultAdministratorIds;
282        administratorsGroups = descriptor.administratorsGroups;
283        setUserSortField(descriptor.userSortField);
284        setGroupSortField(descriptor.groupSortField);
285        setUserListingMode(descriptor.userListingMode);
286        setGroupListingMode(descriptor.groupListingMode);
287        setUserDirectoryName(descriptor.userDirectoryName);
288        setUserEmailField(descriptor.userEmailField);
289        setUserSearchFields(descriptor.userSearchFields);
290        setUserPasswordPattern(descriptor.userPasswordPattern);
291        setGroupDirectoryName(descriptor.groupDirectoryName);
292        setGroupMembersField(descriptor.groupMembersField);
293        setGroupSubGroupsField(descriptor.groupSubGroupsField);
294        setGroupParentGroupsField(descriptor.groupParentGroupsField);
295        setAnonymousUser(descriptor.anonymousUser);
296        setVirtualUsers(descriptor.virtualUsers);
297    }
298
299    public DocumentModel getBareUserModel() {
300        throw new UnsupportedOperationException();
301    }
302
303    public DocumentModel createGroup(DocumentModel groupModel) {
304        throw new UnsupportedOperationException();
305    }
306
307    public DocumentModel createUser(DocumentModel userModel) {
308        throw new UnsupportedOperationException();
309    }
310
311    public void deleteGroup(DocumentModel groupModel) {
312        throw new UnsupportedOperationException();
313    }
314
315    public void deleteGroup(String groupId) {
316        throw new UnsupportedOperationException();
317    }
318
319    public void deleteUser(DocumentModel userModel) {
320        throw new UnsupportedOperationException();
321    }
322
323    public void deleteUser(String userId) {
324        throw new UnsupportedOperationException();
325    }
326
327    public DocumentModel getBareGroupModel() {
328        throw new UnsupportedOperationException();
329    }
330
331    public NuxeoGroup getGroup(String groupName) {
332        throw new UnsupportedOperationException();
333    }
334
335    public List<String> getGroupIds() {
336        throw new UnsupportedOperationException();
337    }
338
339    public List<String> getUserIds() {
340        throw new UnsupportedOperationException();
341    }
342
343    public DocumentModelList searchGroups(Map<String, Serializable> filter, Set<String> fulltext)
344            {
345        throw new UnsupportedOperationException();
346    }
347
348    public DocumentModelList searchUsers(Map<String, Serializable> filter, Set<String> fulltext) {
349        throw new UnsupportedOperationException();
350    }
351
352    public DocumentModelList searchUsers(String pattern) {
353        throw new UnsupportedOperationException();
354    }
355
356    public void updateGroup(DocumentModel groupModel) {
357        throw new UnsupportedOperationException();
358    }
359
360    public void updateUser(DocumentModel userModel) {
361        throw new UnsupportedOperationException();
362    }
363
364    public DocumentModel getGroupModel(String groupName) {
365        throw new UnsupportedOperationException();
366    }
367
368    public DocumentModel getUserModel(String userName) {
369        throw new UnsupportedOperationException();
370    }
371
372    public String getGroupIdField() {
373        return "groupname";
374    }
375
376    public String getGroupLabelField() {
377        return "grouplabel";
378    }
379
380    public String getGroupSchemaName() {
381        return "group";
382    }
383
384    public String getUserIdField() {
385        return "username";
386    }
387
388    public String getUserSchemaName() {
389        return "user";
390    }
391
392    public void createGroup(NuxeoGroup group) {
393        throw new UnsupportedOperationException();
394    }
395
396    public void createPrincipal(NuxeoPrincipal principal) {
397        throw new UnsupportedOperationException();
398    }
399
400    public void deleteGroup(NuxeoGroup group) {
401        throw new UnsupportedOperationException();
402    }
403
404    public void deletePrincipal(NuxeoPrincipal principal) {
405        throw new UnsupportedOperationException();
406    }
407
408    public List<NuxeoGroup> getAvailableGroups() {
409        throw new UnsupportedOperationException();
410    }
411
412    public List<NuxeoPrincipal> getAvailablePrincipals() {
413        throw new UnsupportedOperationException();
414    }
415
416    public DocumentModel getModelForUser(String name) {
417        throw new UnsupportedOperationException();
418    }
419
420    public List<NuxeoPrincipal> searchByMap(Map<String, Serializable> filter, Set<String> pattern)
421            {
422        throw new UnsupportedOperationException();
423    }
424
425    public void updateGroup(NuxeoGroup group) {
426        throw new UnsupportedOperationException();
427    }
428
429    public void updatePrincipal(NuxeoPrincipal principal) {
430        throw new UnsupportedOperationException();
431    }
432
433    public List<String> getAdministratorsGroups() {
434        throw new UnsupportedOperationException();
435    }
436
437    public String[] getUsersForPermission(String perm, ACP acp) {
438        throw new UnsupportedOperationException();
439    }
440
441    @Override
442    public Principal authenticate(String name, String password) {
443        return checkUsernamePassword(name, password) ? getPrincipal(name) : null;
444    }
445
446    @Override
447    public boolean aboutToHandleEvent(Event event) {
448        return false;
449    }
450
451    @Override
452    public void handleEvent(Event event) {
453    }
454}