1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package net.sf.jguard.core.provisioning;
29
30
31 import java.util.Collections;
32 import java.util.HashSet;
33 import java.util.Set;
34
35 import javax.security.auth.Subject;
36
37 import net.sf.jguard.core.authentication.AuthenticationException;
38 import net.sf.jguard.core.authentication.credentials.JGuardCredential;
39 import net.sf.jguard.core.organization.Organization;
40 import org.slf4j.Logger;
41 import org.slf4j.LoggerFactory;
42
43
44
45
46
47
48
49
50 public class SubjectTemplate extends EntityTemplate {
51
52 private static final Logger logger = LoggerFactory.getLogger(SubjectTemplate.class.getName());
53
54 private Set missingPrivateRequiredCred;
55 private Set missingPublicRequiredCred;
56 private Set unknownPrivateOptionalCred;
57 private Set unknownPublicOptionalCred;
58 private Set privateRequiredCredentials;
59 private Set publicRequiredCredentials;
60 private Set publicOptionalCredentials;
61 private Set privateOptionalCredentials;
62
63
64 private Long id;
65
66 private Set principals;
67
68
69
70
71 public SubjectTemplate(){
72 super();
73
74 missingPrivateRequiredCred = new HashSet();
75 missingPublicRequiredCred = new HashSet();
76 unknownPrivateOptionalCred = new HashSet();
77 unknownPublicOptionalCred= new HashSet();
78 privateOptionalCredentials = new HashSet();
79 privateRequiredCredentials = new HashSet();
80 publicOptionalCredentials = new HashSet();
81 publicRequiredCredentials = new HashSet();
82 principals = new HashSet();
83 }
84
85
86
87
88
89
90
91
92
93 public Set validateRequiredCredentialsFromUser(Subject user)throws AuthenticationException{
94 Set missingCredentials = new HashSet();
95 Set credentialsNotRegistered = null;
96
97 Set userPublicRequiredCredentials = getCredentials(getPublicRequiredCredentials(), user.getPublicCredentials(JGuardCredential.class));
98 Set missingPublicCredentials = validateCredentialSet(getPublicRequiredCredentials(), userPublicRequiredCredentials);
99 missingCredentials.addAll(missingPublicCredentials);
100
101 Set userPublicOptionalCredentials = getCredentials(getPublicOptionalCredentials(), user.getPublicCredentials(JGuardCredential.class));
102 credentialsNotRegistered = filterCredentialSet(getPublicOptionalCredentials(), userPublicOptionalCredentials);
103 if(credentialsNotRegistered.size()>0){
104 logger.warn(" there are some unknown credentials filled by the user during the registration process: ");
105 logger.warn(credentialsNotRegistered.toString());
106 }
107
108
109 Set userPrivateRequiredCredentials = getCredentials(getPrivateRequiredCredentials(), user.getPrivateCredentials(JGuardCredential.class));
110 Set missingPrivateCredentials = validateCredentialSet(getPrivateRequiredCredentials(), userPrivateRequiredCredentials);
111 missingCredentials.addAll(missingPrivateCredentials);
112
113 Set userPrivateOptionalCredentials = getCredentials(getPrivateOptionalCredentials(), user.getPrivateCredentials(JGuardCredential.class));
114 credentialsNotRegistered = filterCredentialSet(getPrivateOptionalCredentials(), userPrivateOptionalCredentials);
115 if(credentialsNotRegistered.size()>0){
116 logger.warn(" there are some unknown credentials filled by the user during the registration process: ");
117 logger.warn(credentialsNotRegistered.toString());
118 }
119
120 return missingCredentials;
121 }
122
123
124
125
126
127
128
129
130 public Subject toSubject(SubjectTemplate user,Organization organization){
131
132 Set principalsForRegisteredUsers = new HashSet();
133 principalsForRegisteredUsers.addAll((getPrincipals()));
134
135
136 principalsForRegisteredUsers.add(organization);
137
138 Set publicCredentials = user.getPublicCredentials();
139 Set privateCredentials = user.getPrivateCredentials();
140
141 Subject subject = new Subject(false,principalsForRegisteredUsers,publicCredentials,privateCredentials);
142 return subject;
143 }
144
145
146
147
148
149
150
151 public Subject toSubject(Organization organization){
152 return toSubject(this,organization);
153 }
154
155 public final Set getMissingPublicRequiredCred() {
156 return missingPublicRequiredCred;
157 }
158
159 public final Set getUnknownPrivateOptionalCred() {
160 return unknownPrivateOptionalCred;
161 }
162 public final Set getUnknownPublicOptionalCred() {
163 return unknownPublicOptionalCred;
164 }
165
166
167
168
169 public Object clone() throws CloneNotSupportedException{
170
171 SubjectTemplate clone = new SubjectTemplate();
172 clone.setPrincipals(new HashSet(principals));
173 clone.setPrivateOptionalCredentials(JGuardCredential.cloneCredentialsSet(getPrivateOptionalCredentials()));
174 clone.setPrivateRequiredCredentials(JGuardCredential.cloneCredentialsSet(getPrivateRequiredCredentials()));
175 clone.setPublicOptionalCredentials(JGuardCredential.cloneCredentialsSet(getPublicOptionalCredentials()));
176 clone.setPublicRequiredCredentials(JGuardCredential.cloneCredentialsSet(getPublicRequiredCredentials()));
177 return clone;
178 }
179
180
181
182
183
184
185
186
187 public SubjectTemplate unmodifiableSubjectTemplate() throws CloneNotSupportedException{
188
189 SubjectTemplate readOnly = (SubjectTemplate)this.clone();
190
191
192 readOnly.principals = (Collections.unmodifiableSet(principals));
193
194
195 readOnly.setPrivateOptionalCredentials((Collections.unmodifiableSet(getPrivateOptionalCredentials())));
196 readOnly.setPrivateRequiredCredentials((Collections.unmodifiableSet(getPrivateRequiredCredentials())));
197 readOnly.setPublicOptionalCredentials(((Collections.unmodifiableSet(getPublicOptionalCredentials()))));
198 readOnly.setPublicRequiredCredentials((Collections.unmodifiableSet(getPublicRequiredCredentials())));
199
200 return readOnly;
201 }
202
203
204 public final Set getMissingPrivateRequiredCred() {
205 return missingPrivateRequiredCred;
206 }
207
208 public void setPrivateRequiredCredentials(Set privateCredentials) {
209 this.privateRequiredCredentials = privateCredentials;
210 }
211
212 public void setPublicRequiredCredentials(Set publicCredentials) {
213 this.publicRequiredCredentials = publicCredentials;
214 }
215
216 public Set getPrivateOptionalCredentials() {
217 return privateOptionalCredentials;
218 }
219 public void setPrivateOptionalCredentials(Set privateOptionalCredentials) {
220 this.privateOptionalCredentials = privateOptionalCredentials;
221 }
222 public Set getPublicOptionalCredentials() {
223 return publicOptionalCredentials;
224 }
225 public void setPublicOptionalCredentials(Set publicOptionalCredentials) {
226 this.publicOptionalCredentials = publicOptionalCredentials;
227 }
228
229 public Set getPublicRequiredCredentials() {
230 return publicRequiredCredentials;
231 }
232
233 public Set getPrivateRequiredCredentials() {
234 return privateRequiredCredentials;
235 }
236
237 public Set getPublicCredentials(){
238 Set publicCredentials = getPublicOptionalCredentials();
239 publicCredentials.addAll(getPublicRequiredCredentials());
240 return publicCredentials;
241 }
242
243
244 public Set getPrivateCredentials(){
245 Set privateCredentials = getPrivateOptionalCredentials();
246 privateCredentials.addAll(getPrivateRequiredCredentials());
247 return privateCredentials;
248
249 }
250
251 public Set getRequiredCredentials(){
252 Set requiredCredentials = new HashSet(getPublicRequiredCredentials());
253 requiredCredentials.addAll(getPrivateRequiredCredentials());
254 return requiredCredentials;
255 }
256
257
258
259
260
261
262
263 public void validateTemplate(SubjectTemplate candidate)throws RegistrationException{
264
265 if(candidate.getPrivateRequiredCredentials()==null){
266 logger.warn("private required credentials set from user is null ");
267 candidate.setPrivateRequiredCredentials(new HashSet());
268 }
269 if(candidate.getPrivateOptionalCredentials()==null){
270 logger.warn("private optional credentials set from user is null ");
271 candidate.setPrivateOptionalCredentials(new HashSet());
272 }
273 if(candidate.getPublicRequiredCredentials()==null){
274 logger.warn("public required credentials set from user is null ");
275 candidate.setPublicRequiredCredentials(new HashSet());
276 }
277 if(candidate.getPublicOptionalCredentials()==null){
278 logger.warn("public optional credentials set from user is null ");
279 candidate.setPublicOptionalCredentials(new HashSet());
280 }
281
282 missingPrivateRequiredCred =
283 validateCredentialSet(getPrivateRequiredCredentials(),candidate.getPrivateRequiredCredentials());
284 if(missingPrivateRequiredCred.size()>0){
285 throw new RegistrationException("missing private credentials required :"+missingPrivateRequiredCred,new HashSet(),missingPrivateRequiredCred);
286 }
287
288 missingPublicRequiredCred =
289 validateCredentialSet(getPublicRequiredCredentials(),candidate.getPublicRequiredCredentials());
290 if(missingPrivateRequiredCred.size()>0){
291 throw new RegistrationException("missing public credentials required :"+missingPublicRequiredCred,missingPublicRequiredCred,new HashSet());
292 }
293
294 unknownPrivateOptionalCred =
295 filterCredentialSet(getPrivateOptionalCredentials(),candidate.getPrivateOptionalCredentials());
296 if(unknownPrivateOptionalCred.size()>0){
297 logger.warn(" user has filled unknown optional private credentials :");
298 logger.warn(unknownPrivateOptionalCred.toString());
299 }
300 unknownPublicOptionalCred =
301 filterCredentialSet(getPublicOptionalCredentials(),candidate.getPublicOptionalCredentials());
302 if(unknownPublicOptionalCred.size()>0){
303 logger.warn(" user has filled unknown optional public credentials :");
304 logger.warn(unknownPublicOptionalCred.toString());
305 }
306 }
307
308 public Long getId() {
309 return id;
310 }
311
312 public void setId(Long id) {
313 this.id = id;
314 }
315
316
317 public Set getPrincipals() {
318 return principals;
319 }
320
321
322
323
324 public void setPrincipals(Set principals) {
325 this.principals = principals;
326 }
327
328 }