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.
*
* @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);
}
/*
*
* @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);
}
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);
}
}