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.service.security; 35 36 import fr.paris.lutece.portal.service.spring.SpringContextService; 37 import fr.paris.lutece.portal.service.util.AppLogService; 38 39 /** 40 * Service to access user management functionalities. This class provide 41 * 42 */ 43 public final class LuteceUserService 44 { 45 /** 46 * Private constructor 47 */ 48 private LuteceUserService( ) 49 { 50 // Do nothing 51 } 52 53 /** 54 * Get the LuteceUser with the given name 55 * 56 * @param strName 57 * The name of the LuteceUser to get 58 * @return The LuteceUser, or null if no LuteceUser has the given name 59 */ 60 public static LuteceUser getLuteceUserFromName( String strName ) 61 { 62 // TODO : add separation between user management implementations 63 LuteceUser/../../../../../fr/paris/lutece/portal/service/security/LuteceUser.html#LuteceUser">LuteceUser user = (LuteceUser) LuteceUserCacheService.getInstance( ).getFromCache( strName ); 64 65 if ( user != null ) 66 { 67 try 68 { 69 return (LuteceUser) user.clone( ); 70 } 71 catch( CloneNotSupportedException e ) 72 { 73 AppLogService.error( e.getMessage( ), e ); 74 } 75 } 76 77 for ( ILuteceUserProviderService luteceUserProviderService : SpringContextService.getBeansOfType( ILuteceUserProviderService.class ) ) 78 { 79 user = luteceUserProviderService.getLuteceUserFromName( strName ); 80 81 if ( user != null ) 82 { 83 if ( luteceUserProviderService.canUsersBeCached( ) ) 84 { 85 try 86 { 87 LuteceUserCacheService.getInstance( ).putInCache( strName, user.clone( ) ); 88 } 89 catch( CloneNotSupportedException e ) 90 { 91 AppLogService.error( e.getMessage( ), e ); 92 } 93 } 94 95 return user; 96 } 97 } 98 99 return null; 100 } 101 102 /** 103 * Declares that a user was modified. This method must be used every time a user is updated to keep the cache up to date. Note that if the user name of a 104 * user is changed, this method does not need to be called 105 * 106 * @param strUserName 107 * The name of the updated user. 108 */ 109 public static void userAttributesChanged( String strUserName ) 110 { 111 LuteceUserCacheService.getInstance( ).removeKey( strUserName ); 112 } 113 }