1 /* 2 * Copyright (c) 2002-2022, City of 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.RBACRole; 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 * AdminUserDAO Interface 49 */ 50 public interface IAdminUserDAO 51 { 52 /** 53 * Checks the availibility of an access code 54 * 55 * @param strAccessCode 56 * The access code 57 * @return user ID if the access code is already used by another user, -1 otherwise 58 */ 59 int checkAccessCodeAlreadyInUse( String strAccessCode ); 60 61 /** 62 * Checks the availibility of an email 63 * 64 * @param strEmail 65 * The email 66 * @return True if the email is already used by another user 67 */ 68 int checkEmailAlreadyInUse( String strEmail ); 69 70 /** 71 * Checks wether the role is in use or not 72 * 73 * @param strRoleKey 74 * the role key to check 75 * @return user ID if the emaile is already used by another user, -1 otherwise 76 */ 77 boolean checkRoleAttributed( String strRoleKey ); 78 79 /** 80 * Delete an user 81 * 82 * @param nUserId 83 * the user id 84 */ 85 void delete( int nUserId ); 86 87 /** 88 * Deletes rights delegated by user ie rights with level < userlevel 89 * 90 * @param nUserId 91 * the user id 92 * @param nUserLevel 93 * the user level 94 */ 95 void deleteAllDelegatedRightsForUser( int nUserId, int nUserLevel ); 96 97 /** 98 * Deletes all rights owned by user ie rights with level >= userlevel 99 * 100 * @param nUserId 101 * the user id 102 * @param nUserLevel 103 * the user level 104 */ 105 void deleteAllOwnRightsForUser( int nUserId, int nUserLevel ); 106 107 /** 108 * Delete all rights owned by an user 109 * 110 * @param nUserId 111 * the user id 112 */ 113 void deleteAllRightsForUser( int nUserId ); 114 115 /** 116 * Remove all rights from an user 117 * 118 * @param nUserId 119 * the user id 120 */ 121 void deleteAllRolesForUser( int nUserId ); 122 123 /** 124 * Insert a new record in the table. 125 * 126 * @param user 127 * The AdminUser 128 */ 129 void insert( AdminUser user ); 130 131 /** 132 * Insert a new record in the table. 133 * 134 * @param user 135 * The AdminUser 136 */ 137 void insert( LuteceDefaultAdminUser user ); 138 139 /** 140 * Add a right to an user 141 * 142 * @param nUserId 143 * the user id 144 * @param strRightId 145 * the right id 146 */ 147 void insertRightsListForUser( int nUserId, String strRightId ); 148 149 /** 150 * Gives a role to an user 151 * 152 * @param nUserId 153 * the user id 154 * @param strRoleKey 155 * the key role 156 */ 157 void insertRolesListForUser( int nUserId, String strRoleKey ); 158 159 /** 160 * Load an AdminUser 161 * 162 * @param nUserId 163 * the user id 164 * @return user 165 */ 166 AdminUser load( int nUserId ); 167 168 /** 169 * Load a default AdminUser 170 * 171 * @param nUserId 172 * the user id 173 * @return user 174 */ 175 LuteceDefaultAdminUser loadDefaultAdminUser( int nUserId ); 176 177 /** 178 * Get the right list associated to a given user id 179 * 180 * @param nUserId 181 * the id of the user to retrieve rights 182 * @return the right list as a collection of strings 183 */ 184 Map<String, Right> selectRightsListForUser( int nUserId ); 185 186 /** 187 * Get the role list associated to a given user id 188 * 189 * @param nUserId 190 * the id of the user to retrieve roles 191 * @return the role list 192 */ 193 Map<String, RBACRole> selectRolesListForUser( int nUserId ); 194 195 /** 196 * Get an user by its access code (login) 197 * 198 * @param strUserAccessCode 199 * the login 200 * @return The user found, otherwise null 201 */ 202 AdminUser selectUserByAccessCode( String strUserAccessCode ); 203 204 /** 205 * Get an user by its access code (login) 206 * 207 * @param strUserAccessCode 208 * the login 209 * @param user the user to load 210 * @return The user found, otherwise null 211 */ 212 <T extends AdminUser> T selectUserByAccessCode( String strUserAccessCode,T user ); 213 214 /** 215 * Get the user access code from its email. 216 * 217 * @param strEmail 218 * The email 219 * @return The access code of the user with the given email, or null if no user has been found 220 */ 221 String selectUserByEmail( String strEmail ); 222 223 /** 224 * Gets the collection of all AdminUsers 225 * 226 * @return The user list 227 */ 228 Collection<AdminUser> selectUserList( ); 229 230 /** 231 * Gets a collection of AdminUser that share a given role 232 * 233 * @param strRoleKey 234 * The role key 235 * @return The user List 236 */ 237 Collection<AdminUser> selectUsersByRole( String strRoleKey ); 238 239 /** 240 * Update AdminUser data 241 * 242 * @param user 243 * The AdminUser 244 */ 245 void store( AdminUser user ); 246 247 /** 248 * Update AdminUser data 249 * 250 * @param user 251 * The AdminUser 252 * @param passwordMode 253 * Should the password be updated or not 254 */ 255 void store( LuteceDefaultAdminUser user, PasswordUpdateMode passwordMode ); 256 257 /** 258 * Select all user that own a given level 259 * 260 * @param nIdLevel 261 * The level 262 * @return userList The user's list 263 */ 264 Collection<AdminUser> selectUsersByLevel( int nIdLevel ); 265 266 /** 267 * Update role key if role key name has change 268 * 269 * @param strOldRoleKey 270 * The old role key name 271 * @param role 272 * The new role 273 */ 274 void storeUsersRole( String strOldRoleKey, RBACRole role ); 275 276 /** 277 * Check if the user has the role 278 * 279 * @param nUserId 280 * The ID of the user 281 * @param strRoleKey 282 * The role Key 283 * @return true if the user has the role 284 */ 285 boolean hasRole( int nUserId, String strRoleKey ); 286 287 /** 288 * Remove role for an user 289 * 290 * @param nUserId 291 * The ID of the user 292 * @param strRoleKey 293 * The role key 294 */ 295 void deleteRoleForUser( int nUserId, String strRoleKey ); 296 297 /** 298 * Select users by filter 299 * 300 * @param auFilter 301 * the filter 302 * @return a list of AdminUser 303 */ 304 Collection<AdminUser> selectUsersByFilter( AdminUserFilter auFilter ); 305 306 /** 307 * Get all users having a given right 308 * 309 * @param strIdRight 310 * The ID right 311 * @return A collection of AdminUser 312 */ 313 Collection<AdminUser> selectUsersByRight( String strIdRight ); 314 315 /** 316 * Check if the user has the given right 317 * 318 * @param nUserId 319 * The ID of the user 320 * @param strIdRight 321 * The ID right 322 * @return true if the user has the right 323 */ 324 boolean hasRight( int nUserId, String strIdRight ); 325 326 /** 327 * Remove a right for an user 328 * 329 * @param nUserId 330 * The user ID 331 * @param strIdRight 332 * The right ID 333 */ 334 void deleteRightForUser( int nUserId, String strIdRight ); 335 336 /** 337 * Gets the history of password of the given user 338 * 339 * @param nUserID 340 * Id of the user 341 * @return The collection of recent passwords used by the user. 342 */ 343 List<IPassword> selectUserPasswordHistory( int nUserID ); 344 345 /** 346 * Get the number of password change done by a user since the given date. 347 * 348 * @param minDate 349 * Minimum date to consider. 350 * @param nUserId 351 * Id of the user 352 * @return The number of password change done by the user since the given date. 353 */ 354 int countUserPasswordHistoryFromDate( Timestamp minDate, int nUserId ); 355 356 /** 357 * Log a password change in the password history 358 * 359 * @param password 360 * New password of the user 361 * @param nUserId 362 * Id of the user 363 */ 364 void insertNewPasswordInHistory( IPassword password, int nUserId ); 365 366 /** 367 * Remove every password saved in the password history for a given user. 368 * 369 * @param nUserId 370 * Id of the user 371 */ 372 void removeAllPasswordHistoryForUser( int nUserId ); 373 374 /** 375 * Get a map of anonymization status of a user field. 376 * 377 * @return A map containing the associations of user field name and a boolean describing whether the field should be anonymized. 378 */ 379 Map<String, Boolean> selectAnonymizationStatusUserStaticField( ); 380 381 /** 382 * Update the anonymization status of a user field. 383 * 384 * @param strFieldName 385 * Name of the field to update 386 * @param bAnonymizeFiled 387 * True if the field should be anonymized, false otherwise 388 */ 389 void updateAnonymizationStatusUserStaticField( String strFieldName, boolean bAnonymizeFiled ); 390 391 /** 392 * Get the list of id of user with the expired status. 393 * 394 * @return The list of if of user with the expired status. 395 */ 396 List<Integer> findAllExpiredUserId( ); 397 398 /** 399 * Get the list of id of users that have an expired time life but not the expired status 400 * 401 * @param currentTimestamp 402 * Timestamp describing the current time. 403 * @return the list of id of users with expired time life 404 */ 405 List<Integer> getIdUsersWithExpiredLifeTimeList( Timestamp currentTimestamp ); 406 407 /** 408 * Get the list of id of users that need to receive their first alert 409 * 410 * @param alertMaxDate 411 * The maximum date to send alerts. 412 * @return the list of id of users that need to receive their first alert 413 */ 414 List<Integer> getIdUsersToSendFirstAlert( Timestamp alertMaxDate ); 415 416 /** 417 * Get the list of id of users that need to receive their first alert 418 * 419 * @param alertMaxDate 420 * The maximum date to send alerts. 421 * @param timeBetweenAlerts 422 * Timestamp describing the time between two alerts. 423 * @param maxNumberAlerts 424 * Maximum number of alerts to send to a user 425 * @return the list of id of users that need to receive their first alert 426 */ 427 List<Integer> getIdUsersToSendOtherAlert( Timestamp alertMaxDate, Timestamp timeBetweenAlerts, int maxNumberAlerts ); 428 429 /** 430 * Get the list of id of users that have an expired password but not the change password flag 431 * 432 * @param currentTimestamp 433 * Timestamp describing the current time. 434 * @return the list of id of users with expired passwords 435 */ 436 List<Integer> getIdUsersWithExpiredPasswordsList( Timestamp currentTimestamp ); 437 438 /** 439 * Update status of a list of user accounts 440 * 441 * @param listIdUser 442 * List of user accounts to update 443 * @param nNewStatus 444 * New status of the user 445 */ 446 void updateUserStatus( List<Integer> listIdUser, int nNewStatus ); 447 448 /** 449 * Increment the number of alert send to users by 1 450 * 451 * @param listIdUser 452 * The list of users to update 453 */ 454 void updateNbAlert( List<Integer> listIdUser ); 455 456 /** 457 * Set the "change password" flag of users to true 458 * 459 * @param listIdUser 460 * The list of users to update 461 */ 462 void updateChangePassword( List<Integer> listIdUser ); 463 464 /** 465 * Update the admin user expiration date with the new values. Also update his alert account to 0 466 * 467 * @param nIdUser 468 * Id of the admin user to update 469 * @param newExpirationDate 470 * New expiration date of the user 471 */ 472 void updateUserExpirationDate( int nIdUser, Timestamp newExpirationDate ); 473 474 /** 475 * Update the admin user last login date. 476 * 477 * @param nIdUser 478 * Id of the admin user to update 479 * @param dateLastLogin 480 * New last login date of the user 481 */ 482 void updateDateLastLogin( int nIdUser, Timestamp dateLastLogin ); 483 }