X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;f=security%2Fimpl%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Fsecurity%2Fauthentication%2FUserAdministrationImpl.java;h=bbec005525182f1e277a17c035ad6a68c7a2c058;hb=aa0df19349b7edbc4aedb150862c95fc5ce3910b;hp=a06580cce8545f5c5f137213f31bba68764fca53;hpb=43995978f8779ea9fb686e8cb6f98516d8c2f2e5;p=utils diff --git a/security/impl/src/main/java/org/wamblee/security/authentication/UserAdministrationImpl.java b/security/impl/src/main/java/org/wamblee/security/authentication/UserAdministrationImpl.java index a06580cc..bbec0055 100644 --- a/security/impl/src/main/java/org/wamblee/security/authentication/UserAdministrationImpl.java +++ b/security/impl/src/main/java/org/wamblee/security/authentication/UserAdministrationImpl.java @@ -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 getUsers() { - Set res = new HashSet(); - 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 getUsers(Group aGroup) { - Set res = new HashSet(); - 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 getUsers() { + List res = new ArrayList(); + for (User user : users.list()) { + res.add(user.getName()); } return res; } - /* - * (non-Javadoc) - * - * @see org.wamblee.usermgt.UserAdministration#getGroups() - */ - public Set getGroups() { - Set res = new HashSet(); - for (Group group: groups.list()) { - res.add(new Group(group)); + @Override + public List getUsers(String aGroup) { + Group group = requireGroup(aGroup, "While finding users for group"); + List res = new ArrayList(); + 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 getGroups() { + List res = new ArrayList(); + 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 getGroups(String aUser) { + User user = requireUser(aUser, "While getting list of groups"); + List res = new ArrayList(); + 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); } }