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 package net.sf.jguard.core.authentication.manager; 29 30 31 32 import java.security.Principal; 33 import java.util.Collection; 34 import java.util.Set; 35 36 import javax.security.auth.Subject; 37 38 import net.sf.jguard.core.authentication.AuthenticationException; 39 import net.sf.jguard.core.authentication.credentials.JGuardCredential; 40 import net.sf.jguard.core.organization.Organization; 41 import net.sf.jguard.core.provisioning.OrganizationTemplate; 42 import net.sf.jguard.core.provisioning.RegistrationException; 43 import net.sf.jguard.core.provisioning.SubjectTemplate; 44 45 /** 46 * 47 * this interface provide the ability to operate on the system which stores user profiles. 48 * it can be a database, or an ldap server, or anything else.... 49 * it concerns <strong>administrators</strong> guys. 50 * there is one AuthenticationManager per webapp. 51 * @author <a href="mailto:diabolo512@users.sourceforge.net">Charles Gay</a> 52 * @author <a href="mailto:tandilero@users.sourceforge.net">Maximiliano Batelli</a> 53 * 54 */ 55 public interface AuthenticationManager { 56 57 public Organization createOrganization(OrganizationTemplate organizationTemplate)throws RegistrationException; 58 public void deleteOrganization(Organization organisation); 59 60 /** 61 * return the <i>default</i> Organization identified by the id <b>system</b>. 62 */ 63 public Organization getDefaultOrganization(); 64 public Set getOrganizations()throws AuthenticationException; 65 public void updateOrganization(String organizationIdentityCredential, Organization organisation)throws AuthenticationException; 66 67 /** 68 * @param unique organizationId to find 69 * @return Organization found or <b>null</b> otherwise. 70 */ 71 public Organization findOrganization(String organizationId); 72 73 public String getCredentialId(); 74 75 public String getCredentialPassword(); 76 77 /** 78 * add principals in the list to the persistance storage. 79 * create a Principal in the backend, <strong>only</strong> if it is not already present. 80 * @param role 81 * @throws AuthenticationException 82 */ 83 public void createPrincipal(Principal role) throws AuthenticationException ; 84 85 /** 86 * @param user to be controlled 87 * @param subjectTemplate is the validator 88 */ 89 public Subject createUser(SubjectTemplate user,Organization organization) throws RegistrationException; 90 /** 91 * @param user to be controlled 92 * @param subjectTemplate is the validator 93 */ 94 public Subject createUser(Subject user,Organization organization) throws AuthenticationException ; 95 /** 96 * retrieve role from the webapp. 97 * @param name 98 * @return roleInterface 99 * @throws AuthenticationException 100 */ 101 public Principal getLocalPrincipal(String name)throws AuthenticationException; 102 103 104 /** 105 * get the principals defined in the repository for all the applications. 106 * @return role's list. 107 * @throws AuthenticationException 108 */ 109 public Set getAllPrincipalsSet() throws AuthenticationException; 110 111 /** 112 * get the principals defined in the repository <strong>only</strong> for this application. 113 * @return role's list. 114 * 115 */ 116 public Set getLocalPrincipals(); 117 118 /** 119 * retrieve users which are in conformance with all these credentials. 120 * @param credentials 121 * @return users 122 * @throws AuthenticationException 123 */ 124 public Set findUsers(Collection privateCredentials,Collection publicCredentials)throws AuthenticationException; 125 126 /** 127 * checks if a user with the same username already exists. 128 * @param user 129 * @return result. true if a user with the same name exists, false otherwise. 130 * @throws AuthenticationException 131 */ 132 public boolean userAlreadyExists(Subject user) throws AuthenticationException; 133 134 135 /** 136 * role wether or not exists in the webapp. 137 * @param role to check 138 * @return result 139 * @throws AuthenticationException 140 */ 141 public boolean hasPrincipal(Principal role)throws AuthenticationException; 142 143 /** 144 * role wether or not exists in the webapp. 145 * @param role to check 146 * @return result 147 * @throws AuthenticationException 148 */ 149 public boolean hasPrincipal(String role)throws AuthenticationException; 150 151 /** 152 * update user's informations. 153 * @param identityCred 154 * @param user 155 * @throws AuthenticationException 156 */ 157 public void updateUser(JGuardCredential identityCred,Subject user)throws AuthenticationException; 158 159 /** 160 * remove user. 161 * @param user 162 * @throws AuthenticationException 163 */ 164 public void deleteUser(Subject user)throws AuthenticationException; 165 166 /** 167 * return the OrganizationTemplate. 168 * @param name 169 * @return SubjectTemplate 170 * @throws AuthenticationException 171 */ 172 public OrganizationTemplate getOrganizationTemplate() throws AuthenticationException; 173 174 public void setOrganizationTemplate(OrganizationTemplate organizationTemplate)throws AuthenticationException; 175 176 177 public Set getUsers() throws AuthenticationException; 178 179 public boolean isEmpty(); 180 181 /** 182 * change principal's name. 183 * @param oldPrincipalName 184 * @param principal 185 * @throws AuthenticationException 186 */ 187 public void updatePrincipal(String oldPrincipalName, Principal principal) throws AuthenticationException; 188 189 190 /** 191 * delete this principal and its references in users. 192 * @param principal 193 * @return false i delete fails, true if it succeed 194 * @throws AuthenticationException 195 */ 196 public boolean deletePrincipal(Principal principal)throws AuthenticationException ; 197 198 199 /** 200 * Clone a Principal with a random name 201 * @param roleName Principal name to clone 202 * @return cloned Principal with a different name: roleName + Random integer betweeen 0 and 99999 203 * @throws AuthenticationException 204 */ 205 public Principal clonePrincipal(String roleName) throws AuthenticationException; 206 207 /** 208 * Clone a Principal. If Principal is instance of RolePrincipal makes a call to the clone method leting the clone task to RolePrincipal 209 * @param roleName Principal name to clone 210 * @param cloneName Principal cloned name 211 * @return cloned Principal with the given cloneName 212 * @throws AuthenticationException 213 */ 214 public Principal clonePrincipal(String roleName, String cloneName) throws AuthenticationException; 215 /** 216 * change 'active' property on the specified role for a user. 217 * this change cannot be done on 'guest' user, or if it remains only one 'active=true' role. 218 * @param subject 219 * @param roleName 220 * @param applicationName 221 * @param active 222 * @throws AuthenticationException 223 */ 224 public void setActiveOnRolePrincipal(Subject subject,String roleName,String applicationName,boolean active) throws AuthenticationException; 225 226 public Subject findUser(String login); 227 228 public void updateRoleDefinition(Subject subject, String role,String applicationName,String definition) throws AuthenticationException; 229 230 231 public void importAuthenticationManager(AuthenticationManager authManager); 232 233 /** 234 * Persists a user logon attempt. 235 * @param login user unique ID 236 * @param hostAdress IP Adress 237 * @param hostname DNS Name bound to the IP adress 238 * @succeeded boolean authentication result 239 */ 240 public void persistUserLoginAttempt(String login, String hostAddress, String hostName, boolean succeeded,long timeStamp) throws AuthenticationException; 241 242 /** 243 * Persists a user logon attempt. 244 * @param login user unique ID 245 * @param hostAdress IP Adress 246 * @param hostname DNS Name bound to the IP adress 247 * @succeeded boolean authentication result 248 */ 249 public void persistUserLogoutAttempt(String login, String hostAddress, String hostName, long timeStamp) throws AuthenticationException; 250 251 252 253 /** 254 * define the name of the <strong>current</strong> application which holds this 255 * AuthenticationManager. 256 */ 257 public String getApplicationName(); 258 }