001: /****************************************************************
002: * Licensed to the Apache Software Foundation (ASF) under one *
003: * or more contributor license agreements. See the NOTICE file *
004: * distributed with this work for additional information *
005: * regarding copyright ownership. The ASF licenses this file *
006: * to you under the Apache License, Version 2.0 (the *
007: * "License"); you may not use this file except in compliance *
008: * with the License. You may obtain a copy of the License at *
009: * *
010: * http://www.apache.org/licenses/LICENSE-2.0 *
011: * *
012: * Unless required by applicable law or agreed to in writing, *
013: * software distributed under the License is distributed on an *
014: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
015: * KIND, either express or implied. See the License for the *
016: * specific language governing permissions and limitations *
017: * under the License. *
018: ****************************************************************/package org.apache.james.userrepository;
019:
020: import org.apache.james.security.DigestUtil;
021: import org.apache.james.services.User;
022: import org.apache.james.services.UsersRepository;
023:
024: import java.util.HashMap;
025: import java.util.Iterator;
026: import java.util.LinkedList;
027: import java.util.List;
028:
029: public class MockUsersRepository implements UsersRepository {
030:
031: private final HashMap m_users = new HashMap();
032:
033: /**
034: * force the repository to hold implementations of JamesUser interface, instead of User
035: * JamesUser is _not_ required as of the UsersRepository interface, so the necessarity forcing it
036: * is due to code using UsersRepository while at the same time expecting it to hold JamesUsers
037: * (like in RemoteManagerHandler)
038: */
039: private boolean m_forceUseJamesUser = false;
040:
041: public void setForceUseJamesUser() {
042: m_forceUseJamesUser = true;
043: }
044:
045: public boolean addUser(User user) {
046:
047: if (m_forceUseJamesUser && user instanceof DefaultUser) {
048: DefaultUser aUser = (DefaultUser) user;
049: user = new DefaultJamesUser(aUser.getUserName(), aUser
050: .getHashedPassword(), aUser.getHashAlgorithm());
051: }
052:
053: String key = user.getUserName();
054: if (m_users.containsKey(key))
055: return false;
056: m_users.put(key, user);
057: return true;
058: }
059:
060: public void addUser(String name, Object attributes) {
061: try {
062: String passwordHash = DigestUtil.digestString(
063: ((String) attributes), "SHA");
064:
065: User user;
066:
067: if (m_forceUseJamesUser) {
068: user = new DefaultJamesUser(name, passwordHash, "SHA");
069: } else {
070: user = new DefaultUser(name, passwordHash, "SHA");
071: }
072:
073: addUser(user);
074: } catch (Exception e) {
075: e.printStackTrace(); // encoding failed
076: }
077: }
078:
079: public boolean addUser(String username, String password) {
080: if (m_users.containsKey(username))
081: return false;
082: try {
083: String passwordHash = DigestUtil.digestString((password),
084: "SHA");
085:
086: User user;
087:
088: if (m_forceUseJamesUser) {
089: user = new DefaultJamesUser(username, passwordHash,
090: "SHA");
091: } else {
092: user = new DefaultUser(username, passwordHash, "SHA");
093: }
094:
095: return addUser(user);
096: } catch (Exception e) {
097: e.printStackTrace(); // encoding failed
098: }
099: return false;
100: }
101:
102: public Object getAttributes(String name) {
103: return null; // trivial implementation
104: }
105:
106: public User getUserByName(String name) {
107: return (User) m_users.get(name);
108: }
109:
110: public User getUserByNameCaseInsensitive(String name) {
111: return null; // trivial implementation
112: }
113:
114: public String getRealName(String name) {
115: return ((User) m_users.get(name)).getUserName();
116: }
117:
118: public boolean updateUser(User user) {
119: return false; // trivial implementation
120: }
121:
122: public void removeUser(String name) {
123: m_users.remove(name);
124: }
125:
126: public boolean contains(String name) {
127: return m_users.containsKey(name);
128: }
129:
130: public boolean containsCaseInsensitive(String name) {
131: return false; // trivial implementation
132: }
133:
134: public boolean test(String name, Object attributes) {
135: return false; // trivial implementation
136: }
137:
138: public boolean test(String name, String password) {
139: User user = getUserByName(name);
140: if (user == null)
141: return false;
142: return user.verifyPassword(password);
143: }
144:
145: public int countUsers() {
146: return m_users.size();
147: }
148:
149: protected List listUserNames() {
150: Iterator users = m_users.values().iterator();
151: List userNames = new LinkedList();
152: while (users.hasNext()) {
153: User user = (User) users.next();
154: userNames.add(user.getUserName());
155: }
156:
157: return userNames;
158: }
159:
160: public Iterator list() {
161: return listUserNames().iterator();
162: }
163: }
|