LuteceUser.java
- /*
- * Copyright (c) 2002-2022, City of Paris
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice
- * and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice
- * and the following disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * License 1.0
- */
- package fr.paris.lutece.portal.service.security;
- import fr.paris.lutece.api.user.User;
- import fr.paris.lutece.api.user.UserRole;
- import fr.paris.lutece.portal.business.rbac.RBACRole;
- import java.io.Serializable;
- import java.security.Principal;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Collection;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import org.apache.commons.lang3.ObjectUtils;
- /**
- * This Interface defines all methods required for a Lutece user implementation
- */
- public abstract class LuteceUser implements Principal, Serializable, Cloneable, User
- {
- /*
- * These attribute names are derived from the Platform for Privacy Preferences 1.0 (P3P 1.0) Specification by the W3C (http://www.w3c.org/TR/P3P). The same
- * attribute names are also being considered by the OASIS Web Services for Remote Portlets Technical Committee.
- */
- public static final String BDATE = "user.bdate";
- public static final String GENDER = "user.gender";
- public static final String EMPLOYER = "user.employer";
- public static final String DEPARTMENT = "user.department";
- public static final String JOBTITLE = "user.jobtitle";
- public static final String PREFIX = "user.name.prefix";
- public static final String DATE_LAST_LOGIN = "user.lastLogin";
- public static final String NAME_GIVEN = "user.name.given";
- public static final String NAME_FAMILY = "user.name.family";
- public static final String NAME_MIDDLE = "user.name.middle";
- public static final String NAME_SUFFIX = "user.name.suffix";
- public static final String NAME_NICKNAME = "user.name.nickName";
- public static final String NAME_CIVILITY = "user.name.civility";
- public static final String HOME_INFO_POSTAL_NAME = "user.home-info.postal.name";
- public static final String HOME_INFO_POSTAL_STREET = "user.home-info.postal.street";
- public static final String HOME_INFO_POSTAL_STREET_NUMBER = "user.home-info.postal.street.number";
- public static final String HOME_INFO_POSTAL_STREET_SUFFIX = "user.home-info.postal.street.suffix";
- public static final String HOME_INFO_POSTAL_STREET_NAME = "user.home-info.postal.street.name";
- public static final String HOME_INFO_POSTAL_STREET_TYPE = "user.home-info.postal.street.type";
- public static final String HOME_INFO_POSTAL_STREET_URBAN_DISTRICT = "user.home-info.postal.street.urbandistrict";
- public static final String HOME_INFO_POSTAL_CITY = "user.home-info.postal.city";
- public static final String HOME_INFO_POSTAL_STATEPROV = "user.home-info.postal.stateprov";
- public static final String HOME_INFO_POSTAL_POSTALCODE = "user.home-info.postal.postalcode";
- public static final String HOME_INFO_POSTAL_COUNTRY = "user.home-info.postal.country";
- public static final String HOME_INFO_POSTAL_ORGANIZATION = "user.home-info.postal.organization";
- public static final String HOME_INFO_TELECOM_TELEPHONE_INTCODE = "user.home-info.telecom.telephone.intcode";
- public static final String HOME_INFO_TELECOM_TELEPHONE_LOCCODE = "user.home-info.telecom.telephone.loccode";
- public static final String HOME_INFO_TELECOM_TELEPHONE_NUMBER = "user.home-info.telecom.telephone.number";
- public static final String HOME_INFO_TELECOM_TELEPHONE_EXT = "user.home-info.telecom.telephone.ext";
- public static final String HOME_INFO_TELECOM_TELEPHONE_COMMENT = "user.home-info.telecom.telephone.comment";
- public static final String HOME_INFO_TELECOM_FAX_INT = "user.home-info.telecom.fax.intcode";
- public static final String HOME_INFO_TELECOM_FAX_LOCCODE = "user.home-info.telecom.fax.loccode";
- public static final String HOME_INFO_TELECOM_FAX_NUMBER = "user.home-info.telecom.fax.number";
- public static final String HOME_INFO_TELECOM_FAX_EXT = "user.home-info.telecom.fax.ext";
- public static final String HOME_INFO_TELECOM_FAX_COMMENT = "user.home-info.telecom.fax.comment";
- public static final String HOME_INFO_TELECOM_MOBILE_INTCODE = "user.home-info.telecom.mobile.intcode";
- public static final String HOME_INFO_TELECOM_MOBILE_LOCCODE = "user.home-info.telecom.mobile.loccode";
- public static final String HOME_INFO_TELECOM_MOBILE_NUMBER = "user.home-info.telecom.mobile.number";
- public static final String HOME_INFO_TELECOM_MOBILE_EXT = "user.home-info.telecom.mobile.ext";
- public static final String HOME_INFO_TELECOM_MOBILE_COMMENT = "user.home-info.telecom.mobile.comment";
- public static final String HOME_INFO_TELECOM_PAGER_INTCODE = "user.home-info.telecom.pager.intcode";
- public static final String HOME_INFO_TELECOM_PAGER_LOCCODE = "user.home-info.telecom.pager.loccode";
- public static final String HOME_INFO_TELECOM_PAGER_NUMBER = "user.home-info.telecom.pager.number";
- public static final String HOME_INFO_TELECOM_PAGER_EXT = "user.home-info.telecom.pager.ext";
- public static final String HOME_INFO_TELECOM_PAGER_COMMENT = "user.home-info.telecom.pager.comment";
- public static final String HOME_INFO_ONLINE_EMAIL = "user.home-info.online.email";
- public static final String HOME_INFO_ONLINE_URI = "user.home-info.online.uri";
- public static final String BUSINESS_INFO_POSTAL_NAME = "user.business-info.postal.name";
- public static final String BUSINESS_INFO_POSTAL_STREET = "user.business-info.postal.street";
- public static final String BUSINESS_INFO_POSTAL_CITY = "user.business-info.postal.city";
- public static final String BUSINESS_INFO_POSTAL_STATEPROV = "user.business-info.postal.stateprov";
- public static final String BUSINESS_INFO_POSTAL_POSTALCODE = "user.business-info.postal.postalcode";
- public static final String BUSINESS_INFO_POSTAL_COUNTRY = "user.business-info.postal.country";
- public static final String BUSINESS_INFO_POSTAL_ORGANIZATION = "user.business-info.postal.organization";
- public static final String BUSINESS_INFO_TELECOM_TELEPHONE_INTCODE = "user.business-info.telecom.telephone.intcode";
- public static final String BUSINESS_INFO_TELECOM_TELEPHONE_LOCCODE = "user.business-info.telecom.telephone.loccode";
- public static final String BUSINESS_INFO_TELECOM_TELEPHONE_NUMBER = "user.business-info.telecom.telephone.number";
- public static final String BUSINESS_INFO_TELECOM_TELEPHONE_EXT = "user.business-info.telecom.telephone.ext";
- public static final String BUSINESS_INFO_TELECOM_TELEPHONE_COMMENT = "user.business-info.telecom.telephone.comment";
- public static final String BUSINESS_INFO_TELECOM_FAX_INTCODE = "user.business-info.telecom.fax.intcode";
- public static final String BUSINESS_INFO_TELECOM_FAX_LOCCODE = "user.business-info.telecom.fax.loccode";
- public static final String BUSINESS_INFO_TELECOM_FAX_NUMBER = "user.business-info.telecom.fax.number";
- public static final String BUSINESS_INFO_TELECOM_FAX_EXT = "user.business-info.telecom.fax.ext";
- public static final String BUSINESS_INFO_TELECOM_FAX_COMMENT = "user.business-info.telecom.fax.comment";
- public static final String BUSINESS_INFO_TELECOM_MOBILE_INTCODE = "user.business-info.telecom.mobile.intcode";
- public static final String BUSINESS_INFO_TELECOM_MOBILE_LOCCODE = "user.business-info.telecom.mobile.loccode";
- public static final String BUSINESS_INFO_TELECOM_MOBILE_NUMBER = "user.business-info.telecom.mobile.number";
- public static final String BUSINESS_INFO_TELECOM_MOBILE_EXT = "user.business-info.telecom.mobile.ext";
- public static final String BUSINESS_INFO_TELECOM_MOBILE_COMMENT = "user.business-info.telecom.mobile.comment";
- public static final String BUSINESS_INFO_TELECOM_PAGER_INTCODE = "user.business-info.telecom.pager.intcode";
- public static final String BUSINESS_INFO_TELECOM_PAGER_LOCCODE = "user.business-info.telecom.pager.loccode";
- public static final String BUSINESS_INFO_TELECOM_PAGER_NUMBER = "user.business-info.telecom.pager.number";
- public static final String BUSINESS_INFO_TELECOM_PAGER_EXT = "user.business-info.telecom.pager.ext";
- public static final String BUSINESS_INFO_TELECOM_PAGER_COMMENT = "user.business-info.telecom.pager.comment";
- public static final String BUSINESS_INFO_ONLINE_EMAIL = "user.business-info.online.email";
- public static final String BUSINESS_INFO_ONLINE_URI = "user.business-info.online.uri";
- public static final String ANONYMOUS_USERNAME = "GUEST";
- /** USER REALM TYPE **/
- public static final String USER_REALM = "FRONT_OFFICE_USER";
- private static final long serialVersionUID = -8733640540563208835L;
- /** Map containing users info */
- private Map<String, String> _mapUserInfo = new HashMap<>( );
- /** User's name */
- private String _strUserName;
- /** User's roles */
- private String [ ] _roles;
- /** User's groups */
- private String [ ] _groups;
- /** Authentication Service */
- private String _strAuthenticationService;
- /** Authentication Service impl */
- private LuteceAuthentication _luteceAuthenticationService;
- /** Authentication Service */
- private String _strAuthenticationType;
- /** User's workgroups */
- private List<String> _workgroups = new ArrayList<String>( );
- /**
- * Constructor
- *
- * @param strUserName
- * The User Name
- * @param authenticationService
- * The PortalAuthentication object
- */
- public LuteceUser( String strUserName, LuteceAuthentication authenticationService )
- {
- _strUserName = strUserName;
- _strAuthenticationService = authenticationService.getAuthServiceName( );
- _luteceAuthenticationService = authenticationService;
- }
- /**
- * Gets the user info map
- *
- * @return The user info map
- */
- public final Map<String, String> getUserInfos( )
- {
- return _mapUserInfo;
- }
- /**
- * Add an user's info
- *
- * @param key
- * The info key
- * @param value
- * The info value
- */
- public final void setUserInfo( String key, String value )
- {
- _mapUserInfo.put( key, value );
- }
- /**
- * Gets the user info value
- *
- * @param key
- * The info key
- * @return the user info value
- */
- public final String getUserInfo( String key )
- {
- String strInfo = _mapUserInfo.get( key );
- return ( strInfo == null ) ? "" : strInfo;
- }
- // /////////////////////////////////////////////////////////////////////////
- // Principal Interface Implementation
- /**
- * equals implementation
- *
- * @param object
- * The object to compare
- * @return true if equal, otherwise false
- */
- @Override
- public boolean equals( Object object )
- {
- // FIXME : use LuteceUser property instead of object.toString()
- return ObjectUtils.equals( this.toString( ), ObjectUtils.toString( object ) );
- }
- /**
- * toString implementation
- *
- * @return The username
- */
- @Override
- public String toString( )
- {
- return _strUserName;
- }
- /**
- * hashCode implementation
- *
- * @return The hashcode
- */
- @Override
- public int hashCode( )
- {
- return ( _strUserName == null ) ? 0 : _strUserName.hashCode( );
- }
- /**
- * Return the user's name
- *
- * @return The username
- */
- @Override
- public String getName( )
- {
- return _strUserName;
- }
- // /////////////////////////////////////////////////////////////////////////
- // Other user's info methods
- /**
- * Sets the user's name
- *
- * @param strName
- * The User name
- */
- public void setName( String strName )
- {
- _strUserName = strName;
- }
- /**
- * Returns user's roles
- *
- * @return Returns user's roles
- */
- public String [ ] getRoles( )
- {
- return _roles;
- }
- /**
- * {@inheritDoc }
- */
- @Override
- public Map<String, UserRole> getUserRoles( )
- {
- Map<String, UserRole> mapRoles = new HashMap<>( );
- for ( String strRole : _roles )
- {
- mapRoles.put( strRole, new RBACRole( strRole, strRole ) );
- }
- return mapRoles;
- }
- /**
- * add user's roles
- *
- * @param roles
- * The User roles
- */
- public void addRoles( Collection<String> roles )
- {
- _roles = addInArray( _roles, roles );
- }
- /**
- * Defines user's roles
- *
- * @param roles
- * The User roles
- */
- public void setRoles( Collection<String> roles )
- {
- _roles = getArray( roles );
- }
- /**
- * Returns user's groups
- *
- * @return Returns user's groups
- */
- public String [ ] getGroups( )
- {
- return _groups;
- }
- /**
- * add user's groups
- *
- * @param groups
- * The User groups
- */
- public void addGroups( Collection<String> groups )
- {
- _groups = addInArray( _groups, groups );
- }
- /**
- * Defines user's groups
- *
- * @param groups
- * The User groups
- */
- public void setGroups( Collection<String> groups )
- {
- _groups = getArray( groups );
- }
- /**
- * Add elements of a collection into an array
- *
- * @param array
- * the array to fill
- * @param collection
- * the collection containing the elements to add
- * @return The new array
- */
- private String [ ] addInArray( String [ ] array, Collection<String> collection )
- {
- String [ ] newArray;
- int j = 0;
- if ( array == null )
- {
- newArray = new String [ collection.size( )];
- }
- else
- {
- newArray = Arrays.copyOf( array, collection.size( ) + array.length );
- j= array.length;
- }
- for ( String strItem : collection )
- {
- newArray [j++] = strItem;
- }
- return newArray;
- }
- /**
- * Set elements of a collection in array
- *
- * @param collection
- * the collection containing the elements to add
- * @return An array
- */
- private String [ ] getArray( Collection<String> collection )
- {
- String [ ] newArray = new String [ collection.size( )];
- int j = 0;
- for ( String strItem : collection )
- {
- newArray [j++] = strItem;
- }
- return newArray;
- }
- // //////////////////////////////////////////////////////////////////////////
- // Authentication infos
- /**
- * Defines the authentification service that had authentified the user
- *
- * @param strAuthenticationService
- * The authentification service
- */
- public void setAuthenticationService( String strAuthenticationService )
- {
- _strAuthenticationService = strAuthenticationService;
- }
- /**
- * Returns the authentification service that had authentified the user
- *
- * @return the authentification service that had authentified the user
- */
- public String getAuthenticationService( )
- {
- return _strAuthenticationService;
- }
- /**
- * Defines the authentification type that had authentified the user
- *
- * @param strAuthenticationType
- * The authentification type
- */
- public void setAuthenticationType( String strAuthenticationType )
- {
- _strAuthenticationType = strAuthenticationType;
- }
- /**
- * Returns the authentification type that had authentified the user
- *
- * @return the authentification type that had authentified the user
- */
- public String getAuthenticationType( )
- {
- return _strAuthenticationType;
- }
- /**
- * "Getter method" for {@link #_luteceAuthenticationService}
- *
- * @return value of {@link #_luteceAuthenticationService}
- */
- public LuteceAuthentication getLuteceAuthenticationService( )
- {
- return _luteceAuthenticationService;
- }
- /**
- * "Setter method" for {@link #_luteceAuthenticationService}.
- *
- * @param authenticationService
- * new value of {@link #_luteceAuthenticationService}
- */
- public void setLuteceAuthenticationService( LuteceAuthentication authenticationService )
- {
- _luteceAuthenticationService = authenticationService;
- }
- /**
- * {@inheritDoc}
- */
- @Override
- public Object clone( ) throws CloneNotSupportedException
- {
- return super.clone( );
- }
- /**
- * Get the users email
- *
- * @return The email
- */
- @Override
- public String getEmail( )
- {
- return null;
- }
- /**
- * {@inheritDoc}
- */
- @Override
- public String getAccessCode( )
- {
- return getName( );
- }
- /**
- * {@inheritDoc}
- */
- @Override
- public String getLastName( )
- {
- return this.getUserInfo( LuteceUser.NAME_FAMILY );
- }
- /**
- * {@inheritDoc}
- */
- public @Override String getFirstName( )
- {
- return this.getUserInfo( LuteceUser.NAME_GIVEN );
- }
- /**
- * {@inheritDoc}
- */
- @Override
- public List<String> getUserWorkgroups( )
- {
- return _workgroups;
- }
- /**
- * {@inheritDoc}
- */
- @Override
- public String getRealm( )
- {
- return USER_REALM;
- }
- }