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    @Override
091    public String getUserListingMode() {
092        return userListingMode;
093    }
094
095    public void setUserListingMode(String userListingMode) {
096        this.userListingMode = userListingMode;
097    }
098
099    @Override
100    public String getGroupListingMode() {
101        return groupListingMode;
102    }
103
104    public void setGroupListingMode(String groupListingMode) {
105        this.groupListingMode = groupListingMode;
106    }
107
108    @Override
109    public String getDefaultGroup() {
110        return defaultGroup;
111    }
112
113    public void setDefaultGroup(String defaultGroup) {
114        this.defaultGroup = defaultGroup;
115    }
116
117    @Override
118    public String getUserSortField() {
119        return userSortField;
120    }
121
122    public void setUserSortField(String sortField) {
123        userSortField = sortField;
124    }
125
126    public void setGroupSortField(String sortField) {
127        groupSortField = sortField;
128    }
129
130    public void setUserDirectoryName(String userDirectoryName) {
131        this.userDirectoryName = userDirectoryName;
132    }
133
134    @Override
135    public String getUserDirectoryName() {
136        return userDirectoryName;
137    }
138
139    public void setUserEmailField(String userEmailField) {
140        this.userEmailField = userEmailField;
141    }
142
143    @Override
144    public String getUserEmailField() {
145        return userEmailField;
146    }
147
148    public void setUserSearchFields(Set<String> userSearchFields) {
149        this.userSearchFields = new LinkedHashMap<String, MatchType>();
150        for (String searchField : userSearchFields) {
151            this.userSearchFields.put(searchField, MatchType.SUBSTRING);
152        }
153    }
154
155    public void setUserSearchFields(Map<String, MatchType> userSearchFields) {
156        this.userSearchFields = userSearchFields;
157    }
158
159    @Override
160    public Set<String> getUserSearchFields() {
161        return userSearchFields.keySet();
162    }
163
164    @Override
165    public Set<String> getGroupSearchFields() {
166        return groupSearchFields.keySet();
167    }
168
169    public void setGroupDirectoryName(String groupDirectoryName) {
170        this.groupDirectoryName = groupDirectoryName;
171    }
172
173    @Override
174    public String getGroupDirectoryName() {
175        return groupDirectoryName;
176    }
177
178    public void setGroupMembersField(String groupMembersField) {
179        this.groupMembersField = groupMembersField;
180    }
181
182    @Override
183    public String getGroupMembersField() {
184        return groupMembersField;
185    }
186
187    public void setGroupSubGroupsField(String groupSubGroupsField) {
188        this.groupSubGroupsField = groupSubGroupsField;
189    }
190
191    @Override
192    public String getGroupSubGroupsField() {
193        return groupSubGroupsField;
194    }
195
196    public void setGroupParentGroupsField(String groupParentGroupsField) {
197        this.groupParentGroupsField = groupParentGroupsField;
198    }
199
200    @Override
201    public String getGroupParentGroupsField() {
202        return groupParentGroupsField;
203    }
204
205    @Override
206    public Boolean areGroupsReadOnly() {
207        throw new UnsupportedOperationException();
208    }
209
210    @Override
211    public Boolean areUsersReadOnly() {
212        throw new UnsupportedOperationException();
213    }
214
215    @Override
216    public boolean checkUsernamePassword(String username, String password) {
217        throw new UnsupportedOperationException();
218    }
219
220    @Override
221    public boolean validatePassword(String password) {
222        if (userPasswordPattern == null) {
223            return true;
224        } else {
225            Matcher userPasswordMatcher = userPasswordPattern.matcher(password);
226            return userPasswordMatcher.find();
227        }
228    }
229
230    @Override
231    public List<String> getGroupsInGroup(String parentId) {
232        throw new UnsupportedOperationException();
233    }
234
235    @Override
236    public NuxeoPrincipal getPrincipal(String username) {
237        NuxeoPrincipalImpl principal = new NuxeoPrincipalImpl(SecurityConstants.ADMINISTRATOR, false, true);
238        principal.setGroups(Arrays.asList(SecurityConstants.ADMINISTRATORS));
239        principal.setEmail("admin@example.com");
240        return principal;
241    }
242
243    @Override
244    public List<String> getTopLevelGroups() {
245        throw new UnsupportedOperationException();
246    }
247
248    @Override
249    public List<String> getUsersInGroup(String groupId) {
250        throw new UnsupportedOperationException();
251    }
252
253    @Override
254    public List<String> getUsersInGroupAndSubGroups(String groupId) {
255        throw new UnsupportedOperationException();
256    }
257
258    @Override
259    public DocumentModelList searchGroups(String pattern) {
260        throw new UnsupportedOperationException();
261    }
262
263    @Override
264    public List<NuxeoPrincipal> searchPrincipals(String pattern) {
265        throw new UnsupportedOperationException();
266    }
267
268    @Override
269    public Pattern getUserPasswordPattern() {
270        return userPasswordPattern;
271    }
272
273    public void setUserPasswordPattern(Pattern userPasswordPattern) {
274        this.userPasswordPattern = userPasswordPattern;
275    }
276
277    public void setAnonymousUser(VirtualUser anonymousUser) {
278        this.anonymousUser = anonymousUser;
279    }
280
281    public void setVirtualUsers(Map<String, VirtualUserDescriptor> virtualUsers) {
282        this.virtualUsers.clear();
283        if (virtualUsers != null) {
284            this.virtualUsers.putAll(virtualUsers);
285        }
286    }
287
288    @Override
289    public String getAnonymousUserId() {
290        if (anonymousUser == null) {
291            return null;
292        }
293        return anonymousUser.getId();
294    }
295
296    @Override
297    public String getDigestAuthDirectory() {
298        return null;
299    }
300
301    @Override
302    public String getDigestAuthRealm() {
303        return null;
304    }
305
306    @Override
307    public void setConfiguration(UserManagerDescriptor descriptor) {
308        setDefaultGroup(descriptor.defaultGroup);
309        defaultAdministratorIds = descriptor.defaultAdministratorIds;
310        administratorsGroups = descriptor.administratorsGroups;
311        setUserSortField(descriptor.userSortField);
312        setGroupSortField(descriptor.groupSortField);
313        setUserListingMode(descriptor.userListingMode);
314        setGroupListingMode(descriptor.groupListingMode);
315        setUserDirectoryName(descriptor.userDirectoryName);
316        setUserEmailField(descriptor.userEmailField);
317        setUserSearchFields(descriptor.userSearchFields);
318        setUserPasswordPattern(descriptor.userPasswordPattern);
319        setGroupDirectoryName(descriptor.groupDirectoryName);
320        setGroupMembersField(descriptor.groupMembersField);
321        setGroupSubGroupsField(descriptor.groupSubGroupsField);
322        setGroupParentGroupsField(descriptor.groupParentGroupsField);
323        setAnonymousUser(descriptor.anonymousUser);
324        setVirtualUsers(descriptor.virtualUsers);
325    }
326
327    @Override
328    public DocumentModel getBareUserModel() {
329        throw new UnsupportedOperationException();
330    }
331
332    @Override
333    public DocumentModel createGroup(DocumentModel groupModel) {
334        throw new UnsupportedOperationException();
335    }
336
337    @Override
338    public DocumentModel createUser(DocumentModel userModel) {
339        throw new UnsupportedOperationException();
340    }
341
342    @Override
343    public void deleteGroup(DocumentModel groupModel) {
344        throw new UnsupportedOperationException();
345    }
346
347    @Override
348    public void deleteGroup(String groupId) {
349        throw new UnsupportedOperationException();
350    }
351
352    @Override
353    public void deleteUser(DocumentModel userModel) {
354        throw new UnsupportedOperationException();
355    }
356
357    @Override
358    public void deleteUser(String userId) {
359        throw new UnsupportedOperationException();
360    }
361
362    @Override
363    public DocumentModel getBareGroupModel() {
364        throw new UnsupportedOperationException();
365    }
366
367    @Override
368    public NuxeoGroup getGroup(String groupName) {
369        throw new UnsupportedOperationException();
370    }
371
372    @Override
373    public List<String> getGroupIds() {
374        throw new UnsupportedOperationException();
375    }
376
377    @Override
378    public List<String> getUserIds() {
379        throw new UnsupportedOperationException();
380    }
381
382    @Override
383    public DocumentModelList searchGroups(Map<String, Serializable> filter, Set<String> fulltext) {
384        throw new UnsupportedOperationException();
385    }
386
387    @Override
388    public DocumentModelList searchUsers(Map<String, Serializable> filter, Set<String> fulltext) {
389        throw new UnsupportedOperationException();
390    }
391
392    @Override
393    public DocumentModelList searchUsers(String pattern) {
394        throw new UnsupportedOperationException();
395    }
396
397    @Override
398    public void updateGroup(DocumentModel groupModel) {
399        throw new UnsupportedOperationException();
400    }
401
402    @Override
403    public void updateUser(DocumentModel userModel) {
404        throw new UnsupportedOperationException();
405    }
406
407    @Override
408    public DocumentModel getGroupModel(String groupName) {
409        throw new UnsupportedOperationException();
410    }
411
412    @Override
413    public DocumentModel getUserModel(String userName) {
414        throw new UnsupportedOperationException();
415    }
416
417    @Override
418    public String getGroupIdField() {
419        return "groupname";
420    }
421
422    @Override
423    public String getGroupLabelField() {
424        return "grouplabel";
425    }
426
427    @Override
428    public String getGroupSchemaName() {
429        return "group";
430    }
431
432    @Override
433    public String getUserIdField() {
434        return "username";
435    }
436
437    @Override
438    public String getUserSchemaName() {
439        return "user";
440    }
441
442    @Override
443    public void createGroup(NuxeoGroup group) {
444        throw new UnsupportedOperationException();
445    }
446
447    @Override
448    public void createPrincipal(NuxeoPrincipal principal) {
449        throw new UnsupportedOperationException();
450    }
451
452    @Override
453    public void deleteGroup(NuxeoGroup group) {
454        throw new UnsupportedOperationException();
455    }
456
457    @Override
458    public void deletePrincipal(NuxeoPrincipal principal) {
459        throw new UnsupportedOperationException();
460    }
461
462    @Override
463    public List<NuxeoGroup> getAvailableGroups() {
464        throw new UnsupportedOperationException();
465    }
466
467    @Override
468    public List<NuxeoPrincipal> getAvailablePrincipals() {
469        throw new UnsupportedOperationException();
470    }
471
472    @Override
473    public DocumentModel getModelForUser(String name) {
474        throw new UnsupportedOperationException();
475    }
476
477    @Override
478    public List<NuxeoPrincipal> searchByMap(Map<String, Serializable> filter, Set<String> pattern) {
479        throw new UnsupportedOperationException();
480    }
481
482    @Override
483    public void updateGroup(NuxeoGroup group) {
484        throw new UnsupportedOperationException();
485    }
486
487    @Override
488    public void updatePrincipal(NuxeoPrincipal principal) {
489        throw new UnsupportedOperationException();
490    }
491
492    @Override
493    public List<String> getAdministratorsGroups() {
494        throw new UnsupportedOperationException();
495    }
496
497    @Override
498    public String[] getUsersForPermission(String perm, ACP acp) {
499        throw new UnsupportedOperationException();
500    }
501
502    @Override
503    public Principal authenticate(String name, String password) {
504        return checkUsernamePassword(name, password) ? getPrincipal(name) : null;
505    }
506
507    @Override
508    public boolean aboutToHandleEvent(Event event) {
509        return false;
510    }
511
512    @Override
513    public void handleEvent(Event event) {
514    }
515}