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 ****************************************************************/
019
020 package org.apache.james.user.lib;
021
022 import java.util.ArrayList;
023 import java.util.Iterator;
024 import java.util.List;
025
026 import javax.annotation.Resource;
027 import javax.management.NotCompliantMBeanException;
028 import javax.management.StandardMBean;
029
030 import org.apache.james.user.api.UsersRepositoryException;
031 import org.apache.james.user.api.UsersRepositoryManagementMBean;
032 import org.apache.james.user.api.UsersRepository;
033 import org.apache.james.user.api.model.JamesUser;
034 import org.apache.james.user.api.model.User;
035
036 public class UsersRepositoryManagement extends StandardMBean implements UsersRepositoryManagementMBean {
037
038 /**
039 * The administered UsersRepository
040 */
041 private UsersRepository localUsers;
042
043 @Resource(name = "usersrepository")
044 public void setUsersRepository(UsersRepository localUsers) {
045 this.localUsers = localUsers;
046 }
047
048 public UsersRepositoryManagement() throws NotCompliantMBeanException {
049 super(UsersRepositoryManagementMBean.class);
050 }
051
052 private JamesUser getJamesUser(String userName) throws UsersRepositoryException {
053 User baseuser = localUsers.getUserByName(userName);
054 if (baseuser == null)
055 throw new IllegalArgumentException("user not found: " + userName);
056 if (!(baseuser instanceof JamesUser))
057 throw new IllegalArgumentException("user is not of type JamesUser: " + userName);
058
059 return (JamesUser) baseuser;
060 }
061
062 /**
063 * @see
064 * org.apache.james.user.api.UsersRepositoryManagementMBean#addUser(java.lang.String, java.lang.String)
065 */
066 public void addUser(String userName, String password) throws Exception {
067 try {
068 localUsers.addUser(userName, password);
069 } catch (UsersRepositoryException e) {
070 throw new Exception(e.getMessage());
071 }
072 }
073
074 /**
075 * @see
076 * org.apache.james.user.api.UsersRepositoryManagementMBean#deleteUser(java.lang.String)
077 */
078 public void deleteUser(String userName) throws Exception {
079 try {
080 localUsers.removeUser(userName);
081 } catch (UsersRepositoryException e) {
082 throw new Exception(e.getMessage());
083 }
084 }
085
086 /**
087 * @see
088 * org.apache.james.user.api.UsersRepositoryManagementMBean#verifyExists
089 * (java.lang.String)
090 */
091 public boolean verifyExists(String userName) throws Exception {
092 try {
093 return localUsers.contains(userName);
094 } catch (UsersRepositoryException e) {
095 throw new Exception(e.getMessage());
096 }
097 }
098
099 /**
100 * @see
101 * org.apache.james.user.api.UsersRepositoryManagementMBean#countUsers()
102 */
103 public long countUsers() throws Exception {
104 try {
105 return localUsers.countUsers();
106 } catch (UsersRepositoryException e) {
107 throw new Exception(e.getMessage());
108 }
109 }
110
111 /**
112 * @see
113 * org.apache.james.user.api.UsersRepositoryManagementMBean#listAllUsers()
114 */
115 public String[] listAllUsers() throws Exception {
116 List<String> userNames = new ArrayList<String>();
117 try {
118 for (Iterator<String> it = localUsers.list(); it.hasNext();) {
119 userNames.add(it.next());
120 }
121 } catch (UsersRepositoryException e) {
122 throw new Exception(e.getMessage());
123
124 }
125 return (String[]) userNames.toArray(new String[] {});
126 }
127
128 /**
129 * @see
130 * org.apache.james.user.api.UsersRepositoryManagementMBean#setPassword
131 * (java.lang.String, java.lang.String)
132 */
133 public void setPassword(String userName, String password) throws Exception {
134 try {
135 User user = localUsers.getUserByName(userName);
136 if (user == null)
137 throw new UsersRepositoryException("user not found: " + userName);
138 if (user.setPassword(password) == false) {
139 throw new UsersRepositoryException("Unable to update password for user " + user);
140 }
141 localUsers.updateUser(user);
142 } catch (UsersRepositoryException e) {
143 throw new Exception(e.getMessage());
144
145 }
146
147 }
148
149 /**
150 * @see
151 * org.apache.james.user.api.UsersRepositoryManagementMBean#unsetAlias(java.lang.String)
152 */
153 public void unsetAlias(String userName) throws Exception {
154 try {
155 JamesUser user = getJamesUser(userName);
156 if (!user.getAliasing())
157 throw new UsersRepositoryException("User " + user + " is no alias");
158
159 user.setAliasing(false);
160 localUsers.updateUser(user);
161 } catch (UsersRepositoryException e) {
162 throw new Exception(e.getMessage());
163
164 }
165
166 }
167
168 /**
169 * @see
170 * org.apache.james.user.api.UsersRepositoryManagementMBean#getAlias(java.lang.String)
171 */
172 public String getAlias(String userName) throws Exception {
173 try {
174 JamesUser user = getJamesUser(userName);
175 if (!user.getAliasing())
176 return null;
177 return user.getAlias();
178 } catch (UsersRepositoryException e) {
179 throw new Exception(e.getMessage());
180
181 }
182
183 }
184
185 /**
186 * @see
187 * org.apache.james.user.api.UsersRepositoryManagementMBean#unsetForwardAddress
188 * (java.lang.String)
189 */
190 public void unsetForwardAddress(String userName) throws Exception {
191 try {
192 JamesUser user = getJamesUser(userName);
193 if (!user.getForwarding())
194 throw new UsersRepositoryException("User " + user + " is no forward");
195
196 user.setForwarding(false);
197 localUsers.updateUser(user);
198 } catch (UsersRepositoryException e) {
199 throw new Exception(e.getMessage());
200
201 }
202
203 }
204
205 /**
206 * @see
207 * org.apache.james.user.api.UsersRepositoryManagementMBean#getForwardAddress
208 * (java.lang.String)
209 */
210 public String getForwardAddress(String userName) throws Exception {
211 try {
212 JamesUser user = getJamesUser(userName);
213 if (!user.getForwarding())
214 return null;
215 return user.getForwardingDestination().toString();
216 } catch (UsersRepositoryException e) {
217 throw new Exception(e.getMessage());
218
219 }
220
221 }
222
223 /**
224 * @see org.apache.james.user.api.UsersRepositoryManagementMBean#getVirtualHostingEnabled()
225 */
226 public boolean getVirtualHostingEnabled() throws Exception {
227 try {
228 return localUsers.supportVirtualHosting();
229 } catch (UsersRepositoryException e) {
230 throw new Exception(e.getMessage());
231
232 }
233 }
234
235 }