X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fusermanager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fusermanager%2Finternal%2FUserConfig.java;h=176af3a3e4d1d48ed9b8120f65b7bc5a6bca9ffb;hb=refs%2Fchanges%2F49%2F449%2F1;hp=cedae6c91858420394b953f7e17150bb6d7013b1;hpb=286d94196561feb6de722b2c21a52245ae36e213;p=controller.git diff --git a/opendaylight/usermanager/src/main/java/org/opendaylight/controller/usermanager/internal/UserConfig.java b/opendaylight/usermanager/src/main/java/org/opendaylight/controller/usermanager/internal/UserConfig.java index cedae6c918..176af3a3e4 100644 --- a/opendaylight/usermanager/src/main/java/org/opendaylight/controller/usermanager/internal/UserConfig.java +++ b/opendaylight/usermanager/src/main/java/org/opendaylight/controller/usermanager/internal/UserConfig.java @@ -9,11 +9,12 @@ package org.opendaylight.controller.usermanager.internal; import java.io.Serializable; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.apache.commons.lang3.builder.EqualsBuilder; -import org.apache.commons.lang3.builder.HashCodeBuilder; import org.opendaylight.controller.sal.authorization.AuthResultEnum; import org.opendaylight.controller.sal.utils.Status; import org.opendaylight.controller.sal.utils.StatusCode; @@ -31,7 +32,7 @@ public class UserConfig implements Serializable { * configurations */ protected String user; - protected String role; + protected List roles; private String password; private static final int USERNAME_MAXLENGTH = 32; private static final int PASSWORD_MINLENGTH = 5; @@ -42,12 +43,13 @@ public class UserConfig implements Serializable { public UserConfig() { } - public UserConfig(String user, String password, String role) { + public UserConfig(String user, String password, List roles) { this.user = user; this.password = password; - this.role = role; + this.roles = (roles == null) ? new ArrayList() + : new ArrayList(roles); } - + public String getUser() { return user; } @@ -56,38 +58,65 @@ public class UserConfig implements Serializable { return password; } - public String getRole() { - return role; + public List getRoles() { + return new ArrayList(roles); } @Override public int hashCode() { - return HashCodeBuilder.reflectionHashCode(this); + final int prime = 31; + int result = 1; + result = prime * result + + ((password == null) ? 0 : password.hashCode()); + result = prime * result + ((roles == null) ? 0 : roles.hashCode()); + result = prime * result + ((user == null) ? 0 : user.hashCode()); + return result; } @Override public boolean equals(Object obj) { - return EqualsBuilder.reflectionEquals(this, obj); + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + UserConfig other = (UserConfig) obj; + if (password == null) { + if (other.password != null) + return false; + } else if (!password.equals(other.password)) + return false; + if (roles == null) { + if (other.roles != null) + return false; + } else if (!roles.equals(other.roles)) + return false; + if (user == null) { + if (other.user != null) + return false; + } else if (!user.equals(other.user)) + return false; + return true; } @Override public String toString() { - return "UserConfig[user=" + user + ", password=" + password + "]"; + return "UserConfig[user=" + user + ", password=" + password + ", roles=" + roles +"]"; } public Status validate() { - Status validCheck = new Status(StatusCode.SUCCESS, null); - validCheck = isRoleValid(); - - if (validCheck.isSuccess()) - validCheck = isUsernameValid(); - if (validCheck.isSuccess()) - validCheck = isPasswordValid(); - + Status validCheck = validateRoles(); + if (validCheck.isSuccess()) { + validCheck = validateUsername(); + } + if (validCheck.isSuccess()) { + validCheck = validatePassword(); + } return validCheck; } - protected Status isUsernameValid() { + protected Status validateUsername() { if (user == null || user.isEmpty()) { return new Status(StatusCode.BADREQUEST, "Username cannot be empty"); } @@ -101,10 +130,10 @@ public class UserConfig implements Serializable { + "characters except ./#%;?\\"); } - return new Status(StatusCode.SUCCESS, null); + return new Status(StatusCode.SUCCESS); } - private Status isPasswordValid() { + private Status validatePassword() { if (password == null || password.isEmpty()) { return new Status(StatusCode.BADREQUEST, "Password cannot be empty"); } @@ -114,41 +143,66 @@ public class UserConfig implements Serializable { return new Status(StatusCode.BADREQUEST, "Password should have 5-256 characters"); } - return new Status(StatusCode.SUCCESS, null); + return new Status(StatusCode.SUCCESS); } - protected Status isRoleValid() { - if (role == null || role.isEmpty()) { - return new Status(StatusCode.BADREQUEST, - "Role name cannot be empty"); + protected Status validateRoles() { + if (roles == null || roles.isEmpty()) { + return new Status(StatusCode.BADREQUEST, "No role specified"); } - return new Status(StatusCode.SUCCESS, null); + return new Status(StatusCode.SUCCESS); } - public boolean update(String currentPassword, String newPassword, - String newRole) { + public Status update(String currentPassword, String newPassword, + List newRoles) { // To make any changes to a user configured profile, current password // must always be provided if (!this.password.equals(currentPassword)) { - return false; - } - if (newPassword != null) { - this.password = newPassword; + return new Status(StatusCode.BADREQUEST, + "Current password is incorrect"); } - if (newRole != null) { - this.role = newRole; + + // Create a new object with the proposed modifications + UserConfig proposed = new UserConfig(); + proposed.user = this.user; + proposed.password = (newPassword != null)? newPassword : this.password; + proposed.roles = (newRoles != null)? newRoles : this.roles; + + // Validate it + Status status = proposed.validate(); + if (!status.isSuccess()) { + return status; } - return true; + + // Accept the modifications + this.user = proposed.user; + this.password = proposed.password; + this.roles = new ArrayList(proposed.roles); + + return status; } public AuthResponse authenticate(String clearTextPass) { AuthResponse locResponse = new AuthResponse(); if (password.equals(clearTextPass)) { locResponse.setStatus(AuthResultEnum.AUTH_ACCEPT_LOC); - locResponse.addData(role.replace(",", " ")); + locResponse.addData(getRolesString()); } else { locResponse.setStatus(AuthResultEnum.AUTH_REJECT_LOC); } return locResponse; } + + protected String getRolesString() { + StringBuffer buffer = new StringBuffer(); + if (!roles.isEmpty()) { + Iterator iter = roles.iterator(); + buffer.append(iter.next()); + while (iter.hasNext()) { + buffer.append(" "); + buffer.append(iter.next()); + } + } + return buffer.toString(); + } }