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