1
10package org.jstk.uam;
11
12import java.util.HashMap;
13import java.util.Vector;
14import java.util.Iterator;
15import java.security.Principal;
16
17public class UserAccountManager implements java.io.Serializable {
18 public static class NoSuchUserException extends Exception { }
19 public static class NoSuchRoleException extends Exception { }
20 public static class RoleNotFreeException extends Exception { }
21 public static class InvalidPasswordException extends Exception { }
22
23 private HashMap users = null;
24 private HashMap roles = null;
25 private transient UAMPersistenceManagerIntf pmi;
26
27 private static UserAccountManager instance = null;
28
29 public UserAccountManager(){
30 users = new HashMap();
31 roles = new HashMap();
32 }
33
34 public static UserAccountManager getInstance(UAMPersistenceManagerIntf pmi) throws Exception {
35 if (instance == null)
36 instance = pmi.load();
37 instance.pmi = pmi;
38 return instance;
39 }
40
41 public void addUser(String loginName, String userName, String passWord){
42 JSTKUser user = (JSTKUser)users.get(loginName);
43 if (user != null){
44 user.setUserName(userName);
45 user.setPassWord(passWord);
46 } else {
47 user = new JSTKUser(loginName, userName, passWord);
48 users.put(loginName, user);
49 }
50 pmi.addUser(loginName, userName, passWord);
51 }
52 public void changePassWord(String loginName, String passWord) throws
53 NoSuchUserException {
54 JSTKUser user = (JSTKUser)users.get(loginName);
55 if (user == null)
56 throw new NoSuchUserException();
57 user.setPassWord(passWord);
58 pmi.changePassWord(loginName, passWord);
59 }
60 public Principal getUser(String loginName){
62 JSTKUser user = (JSTKUser)users.get(loginName);
63 if (user == null)
64 return null;
65 else
66 return new JSTKUserPrincipal(user.getLoginName(), user.getUserName());
67 }
68 public void remUser(String loginName){
69 JSTKUser user = (JSTKUser)users.get(loginName);
70 if (user == null) return;
72
73 Iterator itr = user.roles();
75 while (itr.hasNext()){
76 String roleName = (String)itr.next();
77 JSTKRole role = (JSTKRole)roles.get(roleName);
78 role.remUser(loginName);
79 }
80
81 users.remove(loginName);
83 pmi.remUser(loginName);
84 }
85 public Iterator users(){
87 Iterator itr = users.values().iterator();
88 Vector v = new Vector();
89 while (itr.hasNext()){
90 JSTKUser user = (JSTKUser)itr.next();
91 v.add(new JSTKUserPrincipal(user.getLoginName(), user.getUserName()));
92 }
93 return v.iterator();
94 }
95
96 public void addRole(String roleName, String desc){
97 JSTKRole role = (JSTKRole)roles.get(roleName);
98 if (role != null){
99 role.setRoleDesc(desc);
00 } else {
01 role = new JSTKRole(roleName, desc);
02 roles.put(roleName, role);
03 }
04 pmi.addRole(roleName, desc);
05 }
06 public Principal getRole(String roleName){
08 JSTKRole role = (JSTKRole)roles.get(roleName);
09 if (role == null)
10 return null;
11 else
12 return new JSTKRolePrincipal(role.getRoleName(), role.getRoleDesc());
13 }
14 public void remRole(String roleName) throws RoleNotFreeException {
15 JSTKRole role = (JSTKRole)roles.get(roleName);
16 if (role == null)
17 return;
18 if (role.hasUsers())
19 throw new RoleNotFreeException();
20 roles.remove(roleName);
21 pmi.remRole(roleName);
22 }
23 public Iterator roles(){
25 Iterator itr = roles.values().iterator();
26 Vector v = new Vector();
27 while (itr.hasNext()){
28 JSTKRole role = (JSTKRole)itr.next();
29 v.add(new JSTKRolePrincipal(role.getRoleName(), role.getRoleDesc()));
30 }
31 return v.iterator();
32 }
33
34 public Iterator roleUsers(String roleName) throws NoSuchRoleException {
36 JSTKRole role = (JSTKRole)roles.get(roleName);
37 if (role == null) throw new NoSuchRoleException();
39
40 Iterator itr = role.users();
41 Vector v = new Vector();
42 while (itr.hasNext()){
43 String loginName = (String)itr.next();
44 JSTKUser user = (JSTKUser)users.get(loginName);
45 v.add(new JSTKUserPrincipal(user.getLoginName(), user.getUserName()));
46 }
47 return v.iterator();
48 }
49
50 public Iterator userRoles(String loginName) throws NoSuchUserException {
52 JSTKUser user = (JSTKUser)users.get(loginName);
53 if (user == null) throw new NoSuchUserException();
55
56 Iterator itr = user.roles();
57 Vector v = new Vector();
58 while (itr.hasNext()){
59 String roleName = (String)itr.next();
60 JSTKRole role = (JSTKRole)roles.get(roleName);
61 v.add(new JSTKRolePrincipal(role.getRoleName(), role.getRoleDesc()));
62 }
63 return v.iterator();
64 }
65
66 public void addRoleToUser(String roleName, String loginName) throws
67 NoSuchUserException, NoSuchRoleException {
68 JSTKRole role = (JSTKRole)roles.get(roleName);
69 if (role == null)
70 throw new NoSuchRoleException();
71
72 JSTKUser user = (JSTKUser)users.get(loginName);
73 if (user == null)
74 throw new NoSuchUserException();
75
76 if (user.isUserInRole(roleName)) return;
78
79 role.addUser(loginName);
80 user.addRole(roleName);
81 pmi.addRoleToUser(roleName, loginName);
82 }
83
84 public void remRoleFromUser(String roleName, String loginName) throws
85 NoSuchUserException, NoSuchRoleException {
86 JSTKRole role = (JSTKRole)roles.get(roleName);
87 if (role == null)
88 throw new NoSuchRoleException();
89
90 JSTKUser user = (JSTKUser)users.get(loginName);
91 if (user == null)
92 throw new NoSuchUserException();
93
94 if (!user.isUserInRole(roleName)) return;
96
97 role.remUser(loginName);
98 user.remRole(roleName);
99 pmi.remRoleFromUser(roleName, loginName);
00 }
01
02 public void validate(String loginName, String passWord) throws
03 NoSuchUserException, InvalidPasswordException {
04 JSTKUser user = (JSTKUser)users.get(loginName);
05 if (user == null)
06 throw new NoSuchUserException();
07 if (!passWord.equals(user.getPassWord()))
08 throw new InvalidPasswordException();
09 return;
10 }
11}