now using the simplified user management interface.
[utils] / security / impl / src / main / java / org / wamblee / security / authentication / UserAdministrationImpl.java
index a06580cce8545f5c5f137213f31bba68764fca53..bbec005525182f1e277a17c035ad6a68c7a2c058 100644 (file)
@@ -17,9 +17,13 @@ package org.wamblee.security.authentication;
 
 import static org.wamblee.security.authentication.UserMgtException.Reason.*;
 
+import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
+import org.wamblee.security.authentication.UserMgtException.Reason;
+
 /**
  * Administration of users and groups.
  * 
@@ -64,14 +68,13 @@ public class UserAdministrationImpl implements UserAdministration {
      * @see org.wamblee.usermgt.UserAdministration#createUser(java.lang.String,
      * java.lang.String)
      */
-    public User createUser(String aUser, String aPassword, Group aGroup)
-        throws UserMgtException {
-        userValidator.validate(aUser);
-        checkGroup(aGroup);
-
-        User user = users.createUser(aUser, aPassword, aGroup);
+    @Override
+    public void createUser(String aUser, String aPassword) {
+        if (!userValidator.validate(aUser)) {
+            throw new UserMgtException(Reason.INVALID_USERNAME, aUser);
+        }
 
-        return new User(user);
+        users.createUser(aUser, aPassword);
     }
 
     /*
@@ -79,8 +82,11 @@ public class UserAdministrationImpl implements UserAdministration {
      * 
      * @see org.wamblee.usermgt.UserAdministration#createGroup(java.lang.String)
      */
-    public Group createGroup(String aName) throws UserMgtException {
-        groupValidator.validate(aName);
+    @Override
+    public void createGroup(String aName) {
+        if (!groupValidator.validate(aName)) {
+            throw new UserMgtException(Reason.INVALID_GROUPNAME, aName);
+        }
 
         Group group = new Group(aName);
 
@@ -89,247 +95,190 @@ public class UserAdministrationImpl implements UserAdministration {
         }
 
         groups.add(group);
+    }
 
-        return new Group(group);
+    @Override
+    public boolean checkUser(String aUser) {
+        return users.find(aUser) != null;
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.wamblee.usermgt.UserAdministration#userModified(org.wamblee.usermgt
-     * .User)
-     */
-    public void userModified(User aUser) {
-        users.userModified(aUser);
+    @Override
+    public boolean checkGroup(String aGroup) {
+        return groups.find(aGroup) != null;
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.wamblee.usermgt.UserAdministration#groupModified(org.wamblee.usermgt
-     * .Group)
-     */
-    public void groupModified(Group aGroup) {
-        groups.groupModified(aGroup);
+    @Override
+    public boolean checkPassword(String aUser, String aPassword) {
+        User user = requireUser(aUser, "While checking password");
+        return user.checkPassword(aPassword);
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.wamblee.usermgt.UserAdministration#getUser(java.lang.String)
-     */
-    public User getUser(String aName) {
-        User user = users.find(aName);
+    private User requireUser(String aUser, String aMsg) {
+        User user = users.find(aUser);
         if (user == null) {
-            return user;
+            throw new UserMgtException(Reason.UNKNOWN_USER, aMsg);
         }
-        return new User(user);
+        return user;
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.wamblee.usermgt.UserAdministration#getGroup(java.lang.String)
-     */
-    public Group getGroup(String aName) {
-        Group group = groups.find(aName);
-        if ( group == null ) {
-            return group;
+    private Group requireGroup(String aGroup, String aMsg) {
+        Group group = groups.find(aGroup);
+        if (group == null) {
+            throw new UserMgtException(Reason.UNKNOWN_GROUP, aMsg);
         }
-        return new Group(group);
+        return group;
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.wamblee.usermgt.UserAdministration#getUsers()
-     */
-    public Set<User> getUsers() {
-        Set<User> res = new HashSet<User>(); 
-        for (User user: users.list()) { 
-            res.add(new User(user));
-        }
-        return res; 
+    @Override
+    public boolean changePassword(String aUser, String aOldPassword,
+        String aNewPassword) {
+        User user = requireUser(aUser, "While checking password");
+        boolean res = user.changePassword(aOldPassword, aNewPassword);
+        users.userModified(user);
+        return res;
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.wamblee.usermgt.UserAdministration#getUsers(org.wamblee.usermgt.Group
-     * )
-     */
-    public Set<User> getUsers(Group aGroup) {
-        Set<User> res = new HashSet<User>(); 
-        for (User user: users.list(aGroup)) { 
-            res.add(new User(user));
+    @Override
+    public void setPassword(String aUser, String aPassword) {
+        User user = requireUser(aUser, "While setting password");
+        user.setPassword(aPassword);
+        users.userModified(user);
+    }
+
+    @Override
+    public boolean isInGroup(String aUser, String aGroup) {
+        User user = requireUser(aUser,
+            "While checking whether user belongs to group");
+        return user.isInGroup(aGroup);
+    }
+
+    @Override
+    public int getUserCount() {
+        return users.size();
+    }
+
+    @Override
+    public int getGroupCount() {
+        return groups.size();
+    }
+
+    @Override
+    public List<String> getUsers() {
+        List<String> res = new ArrayList<String>();
+        for (User user : users.list()) {
+            res.add(user.getName());
         }
         return res;
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.wamblee.usermgt.UserAdministration#getGroups()
-     */
-    public Set<Group> getGroups() {
-        Set<Group> res = new HashSet<Group>(); 
-        for (Group group: groups.list()) { 
-            res.add(new Group(group));
+    @Override
+    public List<String> getUsers(String aGroup) {
+        Group group = requireGroup(aGroup, "While finding users for group");
+        List<String> res = new ArrayList<String>();
+        for (User user : users.list(group)) {
+            res.add(user.getName());
         }
-        return res; 
+        return res;
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.wamblee.usermgt.UserAdministration#removeUser(org.wamblee.usermgt
-     * .User)
-     */
-    public void removeUser(User aUser) throws UserMgtException {
-        checkUser(aUser);
-        users.remove(aUser);
+    @Override
+    public List<String> getGroups() {
+        List<String> res = new ArrayList<String>();
+        for (Group group : groups.list()) {
+            res.add(group.getName());
+        }
+        return res;
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.wamblee.usermgt.UserAdministration#removeGroup(org.wamblee.usermgt
-     * .Group)
-     */
-    public void removeGroup(Group aGroup) throws UserMgtException {
-        checkGroup(aGroup);
-
-        if (getUsers(aGroup).size() > 0) {
-            throw new UserMgtException(GROUP_STILL_OCCUPIED, aGroup);
+    @Override
+    public List<String> getGroups(String aUser) {
+        User user = requireUser(aUser, "While getting list of groups");
+        List<String> res = new ArrayList<String>();
+        for (Group g : user.getGroups()) {
+            res.add(g.getName());
         }
-
-        groups.remove(aGroup);
+        return res;
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.wamblee.usermgt.UserAdministration#renameUser(org.wamblee.usermgt
-     * .User, java.lang.String)
-     */
-    public void renameUser(User aUser, String aUserName)
-        throws UserMgtException {
-        checkUser(aUser);
+    @Override
+    public void renameUser(String aOldUsername, String aNewUsername) {
+        User user = requireUser(aOldUsername, "While renaming user");
 
-        if (aUser.getName().equals(aUserName)) {
-            throw new UserMgtException(TRIVIAL_RENAME, aUser);
+        if (aOldUsername.equals(aNewUsername)) {
+            return; // nothing to do.
         }
 
-        if (users.find(aUserName) != null) {
-            throw new UserMgtException(DUPLICATE_USER, aUser);
+        if (users.find(aNewUsername) != null) {
+            throw new UserMgtException(DUPLICATE_USER, aNewUsername);
         }
 
-        userValidator.validate(aUserName);
+        if (!userValidator.validate(aNewUsername)) {
+            throw new UserMgtException(Reason.INVALID_USERNAME, aNewUsername);
+        }
 
-        aUser.setName(aUserName);
-        users.userModified(aUser);
+        user.setName(aNewUsername);
+        users.userModified(user);
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.wamblee.usermgt.UserAdministration#renameGroup(org.wamblee.usermgt
-     * .Group, java.lang.String)
-     */
-    public void renameGroup(Group aGroup, String aGroupName)
-        throws UserMgtException {
-        checkGroup(aGroup);
+    @Override
+    public void renameGroup(String aOldGroup, String aNewGroup) {
+        Group group = requireGroup(aOldGroup, "While renaming group");
 
-        if (aGroup.getName().equals(aGroupName)) {
-            throw new UserMgtException(TRIVIAL_RENAME, aGroup);
+        if (aOldGroup.equals(aNewGroup)) {
+            return; // OK.
         }
 
-        if (groups.find(aGroupName) != null) {
-            throw new UserMgtException(DUPLICATE_GROUP, aGroup);
+        if (groups.find(aNewGroup) != null) {
+            throw new UserMgtException(DUPLICATE_GROUP, aNewGroup);
         }
 
-        groupValidator.validate(aGroupName);
+        if (!groupValidator.validate(aNewGroup)) {
+            throw new UserMgtException(Reason.INVALID_GROUPNAME, aNewGroup);
+        }
 
-        aGroup.setName(aGroupName);
-        groups.groupModified(aGroup);
+        group.setName(aNewGroup);
+        groups.groupModified(group);
+        // Because a group has changed, a cached user could contain reference to an old copy of the 
+        // group. Therefore, we clear the cache in this case. 
+        users.clearCache();
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.wamblee.usermgt.UserAdministration#addUserToGroup(org.wamblee.usermgt
-     * .User, org.wamblee.usermgt.Group)
-     */
-    public void addUserToGroup(User aUser, Group aGroup)
-        throws UserMgtException {
-        checkUser(aUser);
-        checkGroup(aGroup);
-        aUser.addGroup(aGroup);
-        users.userModified(aUser);
+    @Override
+    public void removeUser(String aUser) {
+        User user = requireUser(aUser, "While removing user");
+        boolean removed = users.remove(user);
+        if (!removed) {
+            throw new UserMgtException(Reason.UNKNOWN_USER, aUser);
+        }
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see
-     * org.wamblee.usermgt.UserAdministration#removeUserFromGroup(org.wamblee
-     * .usermgt.User, org.wamblee.usermgt.Group)
-     */
-    public void removeUserFromGroup(User aUser, Group aGroup)
-        throws UserMgtException {
-        checkUser(aUser);
-        checkGroup(aGroup);
-        aUser.removeGroup(aGroup);
-        users.userModified(aUser);
-    }
+    @Override
+    public void removeGroup(String aGroup) {
+        Group group = requireGroup(aGroup, "While removing group");
 
-    /**
-     * 
-     * @param aUser
-     * 
-     * @throws UserMgtException
-     */
-    private void checkUser(User aUser) throws UserMgtException {
-        if (!users.contains(aUser)) {
-            throw new UserMgtException(UNKNOWN_USER, aUser);
+        if (getUsers(aGroup).size() > 0) {
+            throw new UserMgtException(GROUP_STILL_OCCUPIED, aGroup);
         }
-    }
 
-    /**
-     * 
-     * @param aGroup
-     * 
-     * @throws UserMgtException
-     */
-    private void checkGroup(Group aGroup) throws UserMgtException {
-        if (!groups.contains(aGroup)) {
-            throw new UserMgtException(UNKNOWN_GROUP, aGroup);
+        boolean removed = groups.remove(group);
+        if (!removed) {
+            throw new UserMgtException(Reason.UNKNOWN_GROUP, aGroup);
         }
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.wamblee.usermgt.UserAdministration#getUserCount()
-     */
-    public int getUserCount() {
-        return users.size();
+    @Override
+    public void addUserToGroup(String aUser, String aGroup) {
+        User user = requireUser(aUser, "While adding user to group");
+        Group group = requireGroup(aGroup, "While adding user to group");
+        user.addGroup(group);
+        users.userModified(user);
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.wamblee.usermgt.UserAdministration#getGroupCount()
-     */
-    public int getGroupCount() {
-        return groups.size();
+    @Override
+    public void removeUserFromGroup(String aUser, String aGroup) {
+        User user = requireUser(aUser, "While removing user from group");
+        Group group = requireGroup(aGroup, "While removing user from group");
+        user.removeGroup(group);
+        users.userModified(user);
     }
 }