1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package org.apache.james.impl.user;
24
25 import org.apache.avalon.framework.service.ServiceException;
26 import org.apache.avalon.framework.service.ServiceManager;
27 import org.apache.avalon.framework.service.Serviceable;
28 import org.apache.james.api.user.JamesUser;
29 import org.apache.james.api.user.User;
30 import org.apache.james.api.user.UsersRepository;
31 import org.apache.james.api.user.UsersStore;
32 import org.apache.james.api.user.management.UserManagementException;
33 import org.apache.james.api.user.management.UserManagementMBean;
34 import org.apache.mailet.MailAddress;
35
36 import javax.mail.internet.ParseException;
37 import java.util.Iterator;
38 import java.util.ArrayList;
39 import java.util.List;
40
41 public class UserManagement implements UserManagementMBean, Serviceable {
42
43 String ROLE = "org.apache.james.impl.user.UserManagement";
44
45
46
47
48 private UsersRepository localUsers;
49 private UsersStore usersStore;
50
51 public void setLocalUsers(UsersRepository localUsers) {
52 this.localUsers = localUsers;
53 }
54
55 public void setUsersStore(UsersStore usersStore) {
56 this.usersStore = usersStore;
57 }
58
59
60
61
62 public void service( final ServiceManager componentManager )
63 throws ServiceException {
64 localUsers = (UsersRepository) componentManager.lookup(UsersRepository.ROLE);
65 if (localUsers == null) {
66 throw new ServiceException("","The local user repository could not be found.");
67 }
68 setLocalUsers(localUsers);
69 usersStore = (UsersStore)componentManager.lookup( UsersStore.ROLE );
70 if (usersStore == null) {
71 throw new ServiceException("","The user store containing the user repositories could not be found.");
72 }
73 setUsersStore(usersStore);
74 }
75
76 private JamesUser getJamesUser(String userName, String repositoryName) throws UserManagementException {
77 User baseuser = getUserRepository(repositoryName).getUserByName(userName);
78 if (baseuser == null) throw new UserManagementException("user not found: " + userName);
79 if (! (baseuser instanceof JamesUser ) ) throw new UserManagementException("user is not of type JamesUser: " + userName);
80
81 return (JamesUser) baseuser;
82 }
83
84 private UsersRepository getUserRepository(String repositoryName) throws UserManagementException {
85 if (repositoryName == null) return localUsers;
86
87 if (usersStore == null) throw new UserManagementException("cannot access user repository named " + repositoryName);
88
89 UsersRepository repository = usersStore.getRepository(repositoryName);
90 if (repository == null) throw new UserManagementException("user repository does not exist: " + repositoryName);
91
92 return repository;
93 }
94
95
96
97
98 public boolean addUser(String userName, String password, String repositoryName) throws UserManagementException {
99 return getUserRepository(repositoryName).addUser(userName, password);
100 }
101
102
103
104
105 public boolean deleteUser(String userName, String repositoryName) throws UserManagementException {
106 UsersRepository users = getUserRepository(repositoryName);
107 if (!users.contains(userName)) return false;
108 users.removeUser(userName);
109 return true;
110 }
111
112
113
114
115 public boolean verifyExists(String userName, String repositoryName) throws UserManagementException {
116 UsersRepository users = getUserRepository(repositoryName);
117 return users.contains(userName);
118 }
119
120
121
122
123 public long countUsers(String repositoryName) throws UserManagementException {
124 UsersRepository users = getUserRepository(repositoryName);
125 return users.countUsers();
126 }
127
128
129
130
131 public String[] listAllUsers(String repositoryName) throws UserManagementException {
132 List userNames = new ArrayList();
133 UsersRepository users = getUserRepository(repositoryName);
134 for (Iterator it = users.list(); it.hasNext();) {
135 userNames.add(it.next());
136 }
137 return (String[])userNames.toArray(new String[]{});
138 }
139
140
141
142
143 public boolean setPassword(String userName, String password, String repositoryName) throws UserManagementException {
144 UsersRepository users = getUserRepository(repositoryName);
145 User user = users.getUserByName(userName);
146 if (user == null) throw new UserManagementException("user not found: " + userName);
147 return user.setPassword(password);
148 }
149
150
151
152
153 public boolean setAlias(String userName, String aliasUserName, String repositoryName) throws UserManagementException {
154 JamesUser user = getJamesUser(userName, null);
155 JamesUser aliasUser = getJamesUser(aliasUserName, null);
156 if (aliasUser == null) return false;
157
158 boolean success = user.setAlias(aliasUserName);
159 user.setAliasing(true);
160 getUserRepository(repositoryName).updateUser(user);
161 return success;
162 }
163
164
165
166
167 public boolean unsetAlias(String userName, String repositoryName) throws UserManagementException {
168 JamesUser user = getJamesUser(userName, null);
169 if (!user.getAliasing()) return false;
170
171 user.setAliasing(false);
172 getUserRepository(repositoryName).updateUser(user);
173 return true;
174 }
175
176
177
178
179 public String getAlias(String userName, String repositoryName) throws UserManagementException {
180 JamesUser user = getJamesUser(userName, null);
181 if (!user.getAliasing()) return null;
182 return user.getAlias();
183 }
184
185
186
187
188 public boolean setForwardAddress(String userName, String forwardEmailAddress, String repositoryName) throws UserManagementException {
189 MailAddress forwardAddress;
190 try {
191 forwardAddress = new MailAddress(forwardEmailAddress);
192 } catch(ParseException pe) {
193 throw new UserManagementException(pe);
194 }
195
196 JamesUser user = getJamesUser(userName, null);
197 boolean success = user.setForwardingDestination(forwardAddress);
198 if (!success) return false;
199
200 user.setForwarding(true);
201 getUserRepository(repositoryName).updateUser(user);
202 return true;
203 }
204
205
206
207
208 public boolean unsetForwardAddress(String userName, String repositoryName) throws UserManagementException {
209 JamesUser user = getJamesUser(userName, null);
210
211 if (!user.getForwarding()) return false;
212
213 user.setForwarding(false);
214 getUserRepository(repositoryName).updateUser(user);
215 return true;
216 }
217
218
219
220
221 public String getForwardAddress(String userName, String repositoryName) throws UserManagementException {
222 JamesUser user = getJamesUser(userName, null);
223 if (!user.getForwarding()) return null;
224 return user.getForwardingDestination().toString();
225 }
226
227
228
229
230 public List getUserRepositoryNames() {
231 List result = new ArrayList();
232 if (usersStore == null) return result;
233
234 Iterator repositoryNames = usersStore.getRepositoryNames();
235 while (repositoryNames.hasNext()) {
236 String name = (String) repositoryNames.next();
237 result.add(name);
238 }
239 return result;
240 }
241
242 }