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    public List<String> getGroupsInGroup(String parentId) {
215        throw new UnsupportedOperationException();
216    }
217
218    public NuxeoPrincipal getPrincipal(String username) {
219        NuxeoPrincipalImpl principal = new NuxeoPrincipalImpl(SecurityConstants.ADMINISTRATOR, false, true);
220        principal.setGroups(Arrays.asList(SecurityConstants.ADMINISTRATORS));
221        principal.setEmail("admin@example.com");
222        return principal;
223    }
224
225    public List<String> getTopLevelGroups() {
226        throw new UnsupportedOperationException();
227    }
228
229    public List<String> getUsersInGroup(String groupId) {
230        throw new UnsupportedOperationException();
231    }
232
233    public List<String> getUsersInGroupAndSubGroups(String groupId) {
234        throw new UnsupportedOperationException();
235    }
236
237    public DocumentModelList searchGroups(String pattern) {
238        throw new UnsupportedOperationException();
239    }
240
241    public List<NuxeoPrincipal> searchPrincipals(String pattern) {
242        throw new UnsupportedOperationException();
243    }
244
245    public Pattern getUserPasswordPattern() {
246        return userPasswordPattern;
247    }
248
249    public void setUserPasswordPattern(Pattern userPasswordPattern) {
250        this.userPasswordPattern = userPasswordPattern;
251    }
252
253    public void setAnonymousUser(VirtualUser anonymousUser) {
254        this.anonymousUser = anonymousUser;
255    }
256
257    public void setVirtualUsers(Map<String, VirtualUserDescriptor> virtualUsers) {
258        this.virtualUsers.clear();
259        if (virtualUsers != null) {
260            this.virtualUsers.putAll(virtualUsers);
261        }
262    }
263
264    public String getAnonymousUserId() {
265        if (anonymousUser == null) {
266            return null;
267        }
268        return anonymousUser.getId();
269    }
270
271    @Override
272    public String getDigestAuthDirectory() {
273        return null;
274    }
275
276    @Override
277    public String getDigestAuthRealm() {
278        return null;
279    }
280
281    public void setConfiguration(UserManagerDescriptor descriptor) {
282        setDefaultGroup(descriptor.defaultGroup);
283        defaultAdministratorIds = descriptor.defaultAdministratorIds;
284        administratorsGroups = descriptor.administratorsGroups;
285        setUserSortField(descriptor.userSortField);
286        setGroupSortField(descriptor.groupSortField);
287        setUserListingMode(descriptor.userListingMode);
288        setGroupListingMode(descriptor.groupListingMode);
289        setUserDirectoryName(descriptor.userDirectoryName);
290        setUserEmailField(descriptor.userEmailField);
291        setUserSearchFields(descriptor.userSearchFields);
292        setUserPasswordPattern(descriptor.userPasswordPattern);
293        setGroupDirectoryName(descriptor.groupDirectoryName);
294        setGroupMembersField(descriptor.groupMembersField);
295        setGroupSubGroupsField(descriptor.groupSubGroupsField);
296        setGroupParentGroupsField(descriptor.groupParentGroupsField);
297        setAnonymousUser(descriptor.anonymousUser);
298        setVirtualUsers(descriptor.virtualUsers);
299    }
300
301    public DocumentModel getBareUserModel() {
302        throw new UnsupportedOperationException();
303    }
304
305    public DocumentModel createGroup(DocumentModel groupModel) {
306        throw new UnsupportedOperationException();
307    }
308
309    public DocumentModel createUser(DocumentModel userModel) {
310        throw new UnsupportedOperationException();
311    }
312
313    public void deleteGroup(DocumentModel groupModel) {
314        throw new UnsupportedOperationException();
315    }
316
317    public void deleteGroup(String groupId) {
318        throw new UnsupportedOperationException();
319    }
320
321    public void deleteUser(DocumentModel userModel) {
322        throw new UnsupportedOperationException();
323    }
324
325    public void deleteUser(String userId) {
326        throw new UnsupportedOperationException();
327    }
328
329    public DocumentModel getBareGroupModel() {
330        throw new UnsupportedOperationException();
331    }
332
333    public NuxeoGroup getGroup(String groupName) {
334        throw new UnsupportedOperationException();
335    }
336
337    public List<String> getGroupIds() {
338        throw new UnsupportedOperationException();
339    }
340
341    public List<String> getUserIds() {
342        throw new UnsupportedOperationException();
343    }
344
345    public DocumentModelList searchGroups(Map<String, Serializable> filter, Set<String> fulltext)
346            {
347        throw new UnsupportedOperationException();
348    }
349
350    public DocumentModelList searchUsers(Map<String, Serializable> filter, Set<String> fulltext) {
351        throw new UnsupportedOperationException();
352    }
353
354    public DocumentModelList searchUsers(String pattern) {
355        throw new UnsupportedOperationException();
356    }
357
358    public void updateGroup(DocumentModel groupModel) {
359        throw new UnsupportedOperationException();
360    }
361
362    public void updateUser(DocumentModel userModel) {
363        throw new UnsupportedOperationException();
364    }
365
366    public DocumentModel getGroupModel(String groupName) {
367        throw new UnsupportedOperationException();
368    }
369
370    public DocumentModel getUserModel(String userName) {
371        throw new UnsupportedOperationException();
372    }
373
374    public String getGroupIdField() {
375        return "groupname";
376    }
377
378    public String getGroupLabelField() {
379        return "grouplabel";
380    }
381
382    public String getGroupSchemaName() {
383        return "group";
384    }
385
386    public String getUserIdField() {
387        return "username";
388    }
389
390    public String getUserSchemaName() {
391        return "user";
392    }
393
394    public void createGroup(NuxeoGroup group) {
395        throw new UnsupportedOperationException();
396    }
397
398    public void createPrincipal(NuxeoPrincipal principal) {
399        throw new UnsupportedOperationException();
400    }
401
402    public void deleteGroup(NuxeoGroup group) {
403        throw new UnsupportedOperationException();
404    }
405
406    public void deletePrincipal(NuxeoPrincipal principal) {
407        throw new UnsupportedOperationException();
408    }
409
410    public List<NuxeoGroup> getAvailableGroups() {
411        throw new UnsupportedOperationException();
412    }
413
414    public List<NuxeoPrincipal> getAvailablePrincipals() {
415        throw new UnsupportedOperationException();
416    }
417
418    public DocumentModel getModelForUser(String name) {
419        throw new UnsupportedOperationException();
420    }
421
422    public List<NuxeoPrincipal> searchByMap(Map<String, Serializable> filter, Set<String> pattern)
423            {
424        throw new UnsupportedOperationException();
425    }
426
427    public void updateGroup(NuxeoGroup group) {
428        throw new UnsupportedOperationException();
429    }
430
431    public void updatePrincipal(NuxeoPrincipal principal) {
432        throw new UnsupportedOperationException();
433    }
434
435    public List<String> getAdministratorsGroups() {
436        throw new UnsupportedOperationException();
437    }
438
439    public String[] getUsersForPermission(String perm, ACP acp) {
440        throw new UnsupportedOperationException();
441    }
442
443    @Override
444    public Principal authenticate(String name, String password) {
445        return checkUsernamePassword(name, password) ? getPrincipal(name) : null;
446    }
447
448    @Override
449    public boolean aboutToHandleEvent(Event event) {
450        return false;
451    }
452
453    @Override
454    public void handleEvent(Event event) {
455    }
456}