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    }