View Javadoc

1   /*
2   jGuard is a security framework based on top of jaas (java authentication and authorization security).
3   it is written for web applications, to resolve simply, access control problems.
4   version $Name:  $
5   http://sourceforge.net/projects/jguard/
6   
7   Copyright (C) 2004  Charles GAY
8   
9   This library is free software; you can redistribute it and/or
10  modify it under the terms of the GNU Lesser General Public
11  License as published by the Free Software Foundation; either
12  version 2.1 of the License, or (at your option) any later version.
13  
14  This library is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  Lesser General Public License for more details.
18  
19  You should have received a copy of the GNU Lesser General Public
20  License along with this library; if not, write to the Free Software
21  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
22  
23  
24  jGuard project home page:
25  http://sourceforge.net/projects/jguard/
26  
27  */
28  
29  package net.sf.jguard.core.provisioning;
30  
31  import java.util.HashSet;
32  import java.util.Iterator;
33  import java.util.Set;
34  import net.sf.jguard.core.authentication.credentials.JGuardCredential;
35  import org.slf4j.Logger;
36  import org.slf4j.LoggerFactory;
37  
38  /**
39   *
40   * @author <a href="mailto:diabolo512@users.sourceforge.net">Charles Gay</a>
41   */
42  public abstract class EntityTemplate implements Cloneable {
43      
44  
45      private static final Logger logger = LoggerFactory.getLogger(EntityTemplate.class.getName());
46      
47      
48      
49      public EntityTemplate(){
50          super();
51      
52      }
53      
54  	
55     abstract public Object clone() throws CloneNotSupportedException;
56        
57          
58          
59          
60         
61          
62          /**
63  	 * get credentials from set in a non-destructive way.
64  	 * @param credentialSetFromTemplate
65  	 * @param credentialSetFromUser
66  	 * @return new set containing credentials from credentialSetFromUser that are in credentialSetFromTemplate
67  	 */
68  	protected static Set getCredentials(Set credentialSetFromTemplate, Set credentialSetFromCandidate) {
69  		Set creds = new HashSet();
70  		Iterator itCredentialFromTemplate = credentialSetFromTemplate.iterator();
71  
72  		while(itCredentialFromTemplate.hasNext()){
73  			JGuardCredential jcred = (JGuardCredential)itCredentialFromTemplate.next();
74  			Iterator itCredentialFromUser = credentialSetFromCandidate.iterator();
75  			while(itCredentialFromUser.hasNext()){
76  				JGuardCredential jcredFromUser =(JGuardCredential)itCredentialFromUser.next();
77  				//we are looking for the right credential id, but not the right value
78  				if(jcred.getName().equals(jcredFromUser.getName())){
79  					creds.add(jcred);
80  					break;
81  				}
82  			}
83  		}
84  		
85  		return creds;
86  	}
87          
88          
89          /**
90  	 * remove unknown credentials (in a destructive way) in the Credential set  from the Candidate entity.
91  	 * @param credentialSetFromTemplate
92  	 * @param credentialSetFromcandidate
93  	 * @return credential Set not registered
94  	 */
95  	protected static Set filterCredentialSet(Set credentialSetFromTemplate, Set credentialSetFromCandidate) {
96  		Iterator itCredentialFromTemplate;
97  		//looking for credentials not registered in the SubjectTemplate reference
98  		Set credentialsNotRegistered = new HashSet();
99  		Iterator itCredentialFromUser = credentialSetFromCandidate.iterator();
100 		while(itCredentialFromUser.hasNext()){
101 			JGuardCredential jcredFromUser = (JGuardCredential)itCredentialFromUser.next();
102 			itCredentialFromTemplate = credentialSetFromTemplate.iterator();
103 			boolean found = false;
104 			while(itCredentialFromTemplate.hasNext()){
105 				JGuardCredential jcredFromTemplate =(JGuardCredential)itCredentialFromTemplate.next();
106 				if(jcredFromUser.getName().equals(jcredFromTemplate.getName())){
107 					found = true;
108 					break;
109 				}
110 			}
111 			if (false == found){
112 				credentialsNotRegistered.add(jcredFromUser);
113 				//we remove from the credential set the
114 				// unknown credential
115 				itCredentialFromUser.remove();
116 			}
117 		}
118 		return credentialsNotRegistered;
119 	}
120         
121         
122         /**
123 	 * validate credentials from the User against credentials from the SubjectTemplate.
124 	 * unknown credentials are filtered.
125 	 * @param credentialSetFromTemplate
126 	 * @param credentialSetFromUser
127 	 * @return missing credentials in the related user's credential set
128 	 */
129 	protected static Set validateCredentialSet(Set credentialSetFromTemplate,Set credentialSetFromCandidate) {
130 		Iterator itCredentialFromTemplate = credentialSetFromTemplate.iterator();
131 		Set missingCredentials = new HashSet();
132 
133 		//looking for missing credentials
134 		while(itCredentialFromTemplate.hasNext()){
135 			JGuardCredential jcred = (JGuardCredential)itCredentialFromTemplate.next();
136 			Iterator itCredentialFromUser = credentialSetFromCandidate.iterator();
137 			boolean found = false;
138 			while(itCredentialFromUser.hasNext()){
139 				JGuardCredential jcredFromUser =(JGuardCredential)itCredentialFromUser.next();
140 				//we are looking for the right credential id, but not the right value
141 				if(jcred.getName().equals(jcredFromUser.getName())){
142 					found = true;
143 					break;
144 				}
145 			}
146 			if (false == found){
147 				missingCredentials.add(jcred);
148 			}
149 		}
150 
151 		Set credentialsNotRegistered = SubjectTemplate.filterCredentialSet(credentialSetFromTemplate, credentialSetFromCandidate);
152 		if(credentialsNotRegistered.size()>0){
153 		  logger.warn(" there are some unknown credentials filled by the user during the registration process: ");
154 		  logger.warn(credentialsNotRegistered.toString());
155 		}
156 
157 		return missingCredentials;
158 	}
159 
160         
161   
162 }