1
2
3
4
5
6
7 package gov.bnl.gums.userGroup;
8
9 import java.util.Set;
10
11 import javax.persistence.Entity;
12 import javax.persistence.Transient;
13
14 import org.apache.log4j.Logger;
15
16 import gov.bnl.gums.GridUser;
17 import gov.bnl.gums.configuration.Configuration;
18 import gov.bnl.gums.util.URIToolkit;
19
20
21
22
23
24
25
26
27
28
29
30 @Entity
31 public class ManualUserGroup extends UserGroup {
32 private Logger log = Logger.getLogger(ManualUserGroup.class);
33
34
35 protected String membersUri;
36 protected String nonMembersUri;
37
38 public ManualUserGroup() {
39 super();
40 }
41
42 public ManualUserGroup(Configuration configuration, String name) {
43 super(configuration, name);
44 }
45
46 public void clearCachedItems() {
47 }
48
49 public String getMembersUri() {
50 return membersUri;
51 }
52
53 public String getNonMembersUri() {
54 return nonMembersUri;
55 }
56
57 @ConfigFieldAnnotation(label="Members URI", example="file:///etc/grid-security/banned_users", help="optional")
58 public void setMembersUri(String membersUri) {
59 this.membersUri = membersUri;
60 }
61
62 @ConfigFieldAnnotation(label="Non-members URI", example="file:///etc/grid-security/unbanned_users", help="optional")
63 public void setNonMembersUri(String nonMembersUri) {
64 this.nonMembersUri = nonMembersUri;
65 }
66
67 public void addMember(GridUser gridUser) {
68 try {
69 synchronized(members) {
70 gridUser.setUserGroup(this);
71 members.add(gridUser);
72 }
73 refreshPatternList();
74 }
75 catch(Exception e) {
76 log.error(e);
77 }
78 }
79
80 public boolean removeMember(GridUser gridUser) {
81 boolean value = false;
82 try {
83 synchronized(members) {
84 value = members.remove(gridUser);
85 }
86 refreshPatternList();
87 }
88 catch(Exception e) {
89 log.error(e);
90 }
91 return value;
92 }
93
94 protected Set<GridUser> retrieveMembers() {
95
96 synchronized(members) {
97 try {
98 if (membersUri!=null && membersUri.length()>0) {
99 String str = URIToolkit.parseUri(membersUri, null);
100 String[] lines = str.split("\n");
101 for (String line: lines) {
102 if (line.length()==0)
103 continue;
104 String[] elements = line.split(",");
105 GridUser user = new GridUser();
106 user.initialize(elements);
107 if (!members.contains(user)) {
108 log.info("Added user "+user+" to "+getName()+" user group");
109 members.add(user);
110 }
111 }
112 }
113 } catch (Throwable e) {
114 String message = "Couldn't retrieve users from URI " + membersUri + ": ";
115 log.error(message, e);
116 throw new RuntimeException(message + ": " + e.getMessage());
117 }
118
119 try {
120 if (nonMembersUri!=null && nonMembersUri.length()>0) {
121 String str = URIToolkit.parseUri(nonMembersUri, null);
122 String[] lines = str.split("\n");
123 for (String line: lines) {
124 if (line.length()==0)
125 continue;
126 String[] elements = line.split(",");
127 GridUser user = new GridUser();
128 user.initialize(elements);
129 if (members.contains(user)) {
130 log.info("Removed user "+user+" from "+getName()+" user group");
131 members.remove(user);
132 }
133 }
134 }
135 } catch (Throwable e) {
136 String message = "Couldn't retrieve users from URI " + nonMembersUri + ": ";
137 log.error(message, e);
138 throw new RuntimeException(message + ": " + e.getMessage());
139 }
140 }
141 return members;
142 }
143 }