1 /* 2 * Copyright (c) 2002-2014, Mairie de Paris 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright notice 10 * and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright notice 13 * and the following disclaimer in the documentation and/or other materials 14 * provided with the distribution. 15 * 16 * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its 17 * contributors may be used to endorse or promote products derived from 18 * this software without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE 24 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 * POSSIBILITY OF SUCH DAMAGE. 31 * 32 * License 1.0 33 */ 34 package fr.paris.lutece.portal.business.user; 35 36 import fr.paris.lutece.portal.business.rbac.AdminRole; 37 import fr.paris.lutece.portal.business.right.Right; 38 import fr.paris.lutece.portal.business.user.authentication.LuteceDefaultAdminUser; 39 import fr.paris.lutece.util.password.IPassword; 40 41 import java.sql.Timestamp; 42 43 import java.util.Collection; 44 import java.util.List; 45 import java.util.Map; 46 47 48 /** 49 * AdminUserDAO Interface 50 */ 51 public interface IAdminUserDAO 52 { 53 /** 54 * Checks the availibility of an access code 55 * @param strAccessCode The access code 56 * @return user ID if the access code is already used by another user, -1 otherwise 57 */ 58 int checkAccessCodeAlreadyInUse( String strAccessCode ); 59 60 /** 61 * Checks the availibility of an email 62 * @param strEmail The email 63 * @return True if the email is already used by another user 64 */ 65 int checkEmailAlreadyInUse( String strEmail ); 66 67 /** 68 * Checks wether the role is in use or not 69 * @param strRoleKey the role key to check 70 * @return user ID if the emaile is already used by another user, -1 otherwise 71 */ 72 boolean checkRoleAttributed( String strRoleKey ); 73 74 /** 75 * Delete an user 76 * @param nUserId the user id 77 */ 78 void delete( int nUserId ); 79 80 /** 81 * Deletes rights delegated by user ie rights with level < userlevel 82 * @param nUserId the user id 83 * @param nUserLevel the user level 84 */ 85 void deleteAllDelegatedRightsForUser( int nUserId, int nUserLevel ); 86 87 /** 88 * Deletes all rights owned by user ie rights with level >= userlevel 89 * @param nUserId the user id 90 * @param nUserLevel the user level 91 */ 92 void deleteAllOwnRightsForUser( int nUserId, int nUserLevel ); 93 94 /** 95 * Delete all rights owned by an user 96 * @param nUserId the user id 97 */ 98 void deleteAllRightsForUser( int nUserId ); 99 100 /** 101 * Remove all rights from an user 102 * @param nUserId the user id 103 */ 104 void deleteAllRolesForUser( int nUserId ); 105 106 /** 107 * Insert a new record in the table. 108 * @param user The AdminUser 109 */ 110 void insert( AdminUser user ); 111 112 /** 113 * Insert a new record in the table. 114 * @param user The AdminUser 115 */ 116 void insert( LuteceDefaultAdminUser user ); 117 118 /** 119 * Add a right to an user 120 * @param nUserId the user id 121 * @param strRightId the right id 122 */ 123 void insertRightsListForUser( int nUserId, String strRightId ); 124 125 /** 126 * Gives a role to an user 127 * @param nUserId the user id 128 * @param strRoleKey the key role 129 */ 130 void insertRolesListForUser( int nUserId, String strRoleKey ); 131 132 /** 133 * Load an AdminUser 134 * @param nUserId the user id 135 * @return user 136 */ 137 AdminUser load( int nUserId ); 138 139 /** 140 * Load a default AdminUser 141 * @param nUserId the user id 142 * @return user 143 */ 144 LuteceDefaultAdminUser loadDefaultAdminUser( int nUserId ); 145 146 /** 147 * Generates a new primary key 148 * @return nKey 149 */ 150 int newPrimaryKey( ); 151 152 /** 153 * Get the right list associated to a given user id 154 * @param nUserId the id of the user to retrieve rights 155 * @return the right list as a collection of strings 156 */ 157 Map<String, Right> selectRightsListForUser( int nUserId ); 158 159 /** 160 * Get the role list associated to a given user id 161 * @param nUserId the id of the user to retrieve roles 162 * @return the role list 163 */ 164 Map<String, AdminRole> selectRolesListForUser( int nUserId ); 165 166 /** 167 * Get an user by its access code (login) 168 * @param strUserAccessCode the login 169 * @return The user found, otherwise null 170 */ 171 AdminUser selectUserByAccessCode( String strUserAccessCode ); 172 173 /** 174 * Get the user access code from its email. 175 * @param strEmail The email 176 * @return The access code of the user with the given email, or null if no user has been found 177 */ 178 String selectUserByEmail( String strEmail ); 179 180 /** 181 * Gets the collection of all AdminUsers 182 * @return The user list 183 */ 184 Collection<AdminUser> selectUserList( ); 185 186 /** 187 * Gets a collection of AdminUser that share a given role 188 * @param strRoleKey The role key 189 * @return The user List 190 */ 191 Collection<AdminUser> selectUsersByRole( String strRoleKey ); 192 193 /** 194 * Update AdminUser data 195 * @param user The AdminUser 196 */ 197 void store( AdminUser user ); 198 199 /** 200 * Update AdminUser data 201 * @param user The AdminUser 202 */ 203 void store( LuteceDefaultAdminUser user ); 204 205 /** 206 * Select all user that own a given level 207 * @param nIdLevel The level 208 * @return userList The user's list 209 */ 210 Collection<AdminUser> selectUsersByLevel( int nIdLevel ); 211 212 /** 213 * Update role key if role key name has change 214 * @param strOldRoleKey The old role key name 215 * @param role The new role 216 */ 217 void storeUsersRole( String strOldRoleKey, AdminRole role ); 218 219 /** 220 * Check if the user has the role 221 * @param nUserId The ID of the user 222 * @param strRoleKey The role Key 223 * @return true if the user has the role 224 */ 225 boolean hasRole( int nUserId, String strRoleKey ); 226 227 /** 228 * Remove role for an user 229 * @param nUserId The ID of the user 230 * @param strRoleKey The role key 231 */ 232 void deleteRoleForUser( int nUserId, String strRoleKey ); 233 234 /** 235 * Select users by filter 236 * @param auFilter the filter 237 * @return a list of AdminUser 238 */ 239 Collection<AdminUser> selectUsersByFilter( AdminUserFilter auFilter ); 240 241 /** 242 * Get all users having a given right 243 * @param strIdRight The ID right 244 * @return A collection of AdminUser 245 */ 246 Collection<AdminUser> selectUsersByRight( String strIdRight ); 247 248 /** 249 * Check if the user has the given right 250 * @param nUserId The ID of the user 251 * @param strIdRight The ID right 252 * @return true if the user has the right 253 */ 254 boolean hasRight( int nUserId, String strIdRight ); 255 256 /** 257 * Remove a right for an user 258 * @param nUserId The user ID 259 * @param strIdRight The right ID 260 */ 261 void deleteRightForUser( int nUserId, String strIdRight ); 262 263 /** 264 * Gets the history of password of the given user 265 * @param nUserID Id of the user 266 * @return The collection of recent passwords used by the user. 267 */ 268 List<IPassword> selectUserPasswordHistory( int nUserID ); 269 270 /** 271 * Get the number of password change done by a user since the given date. 272 * @param minDate Minimum date to consider. 273 * @param nUserId Id of the user 274 * @return The number of password change done by the user since the given date. 275 */ 276 int countUserPasswordHistoryFromDate( Timestamp minDate, int nUserId ); 277 278 /** 279 * Log a password change in the password history 280 * @param password New password of the user 281 * @param nUserId Id of the user 282 */ 283 void insertNewPasswordInHistory( IPassword password, int nUserId ); 284 285 /** 286 * Remove every password saved in the password history for a given user. 287 * @param nUserId Id of the user 288 */ 289 void removeAllPasswordHistoryForUser( int nUserId ); 290 291 /** 292 * Get a map of anonymization status of a user field. 293 * @return A map containing the associations of user field name and a boolean describing whether the field should be anonymized. 294 */ 295 Map<String, Boolean> selectAnonymizationStatusUserStaticField( ); 296 297 /** 298 * Update the anonymization status of a user field. 299 * @param strFieldName Name of the field to update 300 * @param bAnonymizeFiled True if the field should be anonymized, false otherwise 301 */ 302 void updateAnonymizationStatusUserStaticField( String strFieldName, boolean bAnonymizeFiled ); 303 304 /** 305 * Get the list of id of user with the expired status. 306 * @return The list of if of user with the expired status. 307 */ 308 List<Integer> findAllExpiredUserId( ); 309 310 /** 311 * Get the list of id of users that have an expired time life but not the expired status 312 * @param currentTimestamp Timestamp describing the current time. 313 * @return the list of id of users with expired time life 314 */ 315 List<Integer> getIdUsersWithExpiredLifeTimeList( Timestamp currentTimestamp ); 316 317 /** 318 * Get the list of id of users that need to receive their first alert 319 * @param alertMaxDate The maximum date to send alerts. 320 * @return the list of id of users that need to receive their first alert 321 */ 322 List<Integer> getIdUsersToSendFirstAlert( Timestamp alertMaxDate ); 323 324 /** 325 * Get the list of id of users that need to receive their first alert 326 * @param alertMaxDate The maximum date to send alerts. 327 * @param timeBetweenAlerts Timestamp describing the time between two alerts. 328 * @param maxNumberAlerts Maximum number of alerts to send to a user 329 * @return the list of id of users that need to receive their first alert 330 */ 331 List<Integer> getIdUsersToSendOtherAlert( Timestamp alertMaxDate, Timestamp timeBetweenAlerts, int maxNumberAlerts ); 332 333 /** 334 * Get the list of id of users that have an expired password but not the change password flag 335 * @param currentTimestamp Timestamp describing the current time. 336 * @return the list of id of users with expired passwords 337 */ 338 List<Integer> getIdUsersWithExpiredPasswordsList( Timestamp currentTimestamp ); 339 340 /** 341 * Update status of a list of user accounts 342 * @param listIdUser List of user accounts to update 343 * @param nNewStatus New status of the user 344 */ 345 void updateUserStatus( List<Integer> listIdUser, int nNewStatus ); 346 347 /** 348 * Increment the number of alert send to users by 1 349 * @param listIdUser The list of users to update 350 */ 351 void updateNbAlert( List<Integer> listIdUser ); 352 353 /** 354 * Set the "change password" flag of users to true 355 * @param listIdUser The list of users to update 356 */ 357 void updateChangePassword( List<Integer> listIdUser ); 358 359 /** 360 * Update the admin user expiration date with the new values. Also update his alert account to 0 361 * @param nIdUser Id of the admin user to update 362 * @param newExpirationDate New expiration date of the user 363 */ 364 void updateUserExpirationDate( int nIdUser, Timestamp newExpirationDate ); 365 366 /** 367 * Update the admin user last login date. 368 * @param nIdUser Id of the admin user to update 369 * @param dateLastLogin New last login date of the user 370 */ 371 void updateDateLastLogin( int nIdUser, Timestamp dateLastLogin ); 372 }