00001
00027 package org.objectweb.jonas.security.realm.principals;
00028
00029 import java.io.Serializable;
00030 import java.security.Principal;
00031 import java.util.ArrayList;
00032 import java.util.Enumeration;
00033 import java.util.StringTokenizer;
00034 import java.util.Vector;
00035
00036 import org.objectweb.jonas.security.realm.lib.HashHelper;
00037 import org.objectweb.jonas.security.realm.lib.HashPassword;
00038 import org.objectweb.jonas.security.realm.lib.XML;
00039
00047 public class User implements Principal, Serializable, UserMBean {
00048
00052 protected static final String SEPARATOR = ",";
00053
00057 private String name = null;
00058
00062 private String password = null;
00063
00067 private HashPassword hashPassword = null;
00068
00072 private Vector groups = new Vector();
00073
00077 private Vector roles = new Vector();
00078
00082 private ArrayList combinedRoles = new ArrayList();
00083
00087 public User() {
00088 }
00089
00095 public User(String name, String password) {
00096 setName(name);
00097 setPassword(password);
00098 }
00099
00104 public void setName(String name) {
00105 if (name.startsWith("##DN##")) {
00106
00107 this.name = name.replace('=', '#').replace(',', '%').replace(' ', '$');
00108 } else {
00109 this.name = name;
00110 }
00111 }
00112
00117 public String getName() {
00118 return name;
00119 }
00120
00125 public String getPassword() {
00126 return password;
00127 }
00128
00133 public void setPassword(String password) {
00134 this.password = password;
00135 setHashPassword(HashHelper.getHashPassword(password));
00136 }
00137
00142 protected void setHashPassword(HashPassword hashPassword) {
00143 this.hashPassword = hashPassword;
00144 }
00145
00150 public HashPassword getHashPassword() {
00151 return hashPassword;
00152 }
00153
00158 public void setGroups(String groups) {
00159 StringTokenizer st = new StringTokenizer(groups, SEPARATOR);
00160 String group = null;
00161 while (st.hasMoreTokens()) {
00162 group = st.nextToken().trim();
00163 addGroup(group);
00164 }
00165 }
00166
00171 public String getGroups() {
00172 String groupsList = "";
00173 Enumeration g = groups.elements();
00174 int nb = 0;
00175 String group = null;
00176
00177 while (g.hasMoreElements()) {
00178 if (nb > 0) {
00179 groupsList += ", ";
00180 }
00181 group = (String) g.nextElement();
00182 groupsList += group;
00183 }
00184 return groupsList;
00185
00186 }
00187
00192 public String[] getArrayGroups() {
00193 return ((String[]) groups.toArray(new String[groups.size()]));
00194 }
00195
00200 public void setRoles(String roles) {
00201 if (roles != null) {
00202 StringTokenizer st = new StringTokenizer(roles, SEPARATOR);
00203 String role = null;
00204 while (st.hasMoreTokens()) {
00205 role = st.nextToken().trim();
00206 addRole(role);
00207 }
00208 }
00209 }
00210
00215 public void addGroup(String group) {
00216 if (!groups.contains(group)) {
00217 this.groups.addElement(group);
00218 }
00219 }
00220
00225 public void addRole(String role) {
00226 if (!roles.contains(role)) {
00227 this.roles.addElement(role);
00228 }
00229 }
00230
00235 public void removeGroup(String group) {
00236 if (groups.contains(group)) {
00237 this.groups.removeElement(group);
00238 }
00239 }
00240
00245 public void removeRole(String role) {
00246 if (roles.contains(role)) {
00247 this.roles.removeElement(role);
00248 }
00249 }
00250
00255 public String getRoles() {
00256 String rolesList = "";
00257 Enumeration r = roles.elements();
00258 int nb = 0;
00259 String role = null;
00260
00261 while (r.hasMoreElements()) {
00262 if (nb > 0) {
00263 rolesList += ", ";
00264 }
00265 role = (String) r.nextElement();
00266 rolesList += role;
00267 }
00268 return rolesList;
00269 }
00270
00275 public void setCombinedRoles(ArrayList combinedRoles) {
00276 this.combinedRoles = combinedRoles;
00277 }
00278
00283 public ArrayList getCombinedRoles() {
00284 return combinedRoles;
00285 }
00286
00291 public String[] getArrayRoles() {
00292 return ((String[]) roles.toArray(new String[roles.size()]));
00293 }
00294
00299 public String toXML() {
00300 StringBuffer xml = new StringBuffer("<user name=\"");
00301 xml.append(name);
00302 xml.append("\" password=\"");
00303 if (password != null) {
00304 xml.append(password);
00305 }
00306 xml.append("\"");
00307 XML.appendVectorToBuffer("groups=", xml, groups);
00308 XML.appendVectorToBuffer("roles=", xml, roles);
00309 xml.append(" />");
00310 return xml.toString();
00311 }
00312
00317 public String toString() {
00318 return this.toXML();
00319 }
00320
00321 }