View Javadoc
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.plugins.automaticroleprovider.service;
35  
36  import java.util.ArrayList;
37  import java.util.Collection;
38  import java.util.List;
39  import java.util.Locale;
40  
41  import fr.paris.lutece.plugins.mylutece.business.LuteceUserRoleDescription;
42  import fr.paris.lutece.plugins.mylutece.service.IMyLuteceExternalRolesProvider;
43  import fr.paris.lutece.portal.business.role.Role;
44  import fr.paris.lutece.portal.business.role.RoleHome;
45  import fr.paris.lutece.portal.service.i18n.I18nService;
46  import fr.paris.lutece.portal.service.security.LuteceUser;
47  
48  
49  
50  /**
51   * The Class AutomaticRoleProvider.
52   */
53  public class AutomaticRoleProvider implements IMyLuteceExternalRolesProvider 
54  {
55      
56      /** The list automatic role configuration. */
57      private List<AutomaticRoleConfiguration> _listAutomaticRoleConfiguration;
58      
59      
60  	
61  	// Properties for page titles
62      private static final String PROPERTY_PAGE_ROLE_DESCRIPTION_MESSAGE = "automaticroleprovider.automaticRoleProvider.roleDescriptionMessage";
63      private static final String PROPERTY_PAGE_ROLE_DESCRIPTION_MESSAGE_AUTOMATIC = "automaticroleprovider.automaticRoleProvider.roleDescriptionMessageAutomatic";
64      
65      private static final String PROPERTY_PAGE_ROLE_DESCRIPTION_ERROR = "automaticroleprovider.automaticRoleProvider.roleDescriptionError";
66       
67     
68      
69  	
70  	/**
71  	 * Instantiates a new automatic role provider.
72  	 *
73  	 * @param listAutomaticRoleConfiguration the list automatic role configuration
74  	 */
75  	public AutomaticRoleProvider(List<AutomaticRoleConfiguration>  listAutomaticRoleConfiguration) {
76  		super();
77  		this._listAutomaticRoleConfiguration = listAutomaticRoleConfiguration;
78  		
79  		
80  		
81  		
82  	
83  	}
84  
85  	/**
86       * {@inheritDoc}
87       */
88      @Override
89      public Collection<String> providesRoles( LuteceUser user ) 
90      {
91         
92      	 List<String> listRoles=new ArrayList<String>();
93      	 
94      	 if(this._listAutomaticRoleConfiguration!=null)
95           {
96     			this._listAutomaticRoleConfiguration.stream().filter(x->  x.getConfigurationPredicate().getPredicate().test(user, x)).forEach(x -> listRoles.add(x.getRole()));
97  
98           }
99     	  
100    	  return listRoles;
101          
102   
103     	
104     }
105     
106     /**
107      * {@inheritDoc}
108      */
109     @Override
110     public List<LuteceUserRoleDescription> getLuteceUserRolesProvided(Locale locale)
111     {
112     	
113     	List<LuteceUserRoleDescription> lisDescriptions=new ArrayList<LuteceUserRoleDescription>();
114     	if(this._listAutomaticRoleConfiguration!=null)
115         {
116 			this._listAutomaticRoleConfiguration.forEach(x -> {
117 				Role role = RoleHome.findByPrimaryKey(x.getRole());
118 				if (role != null) {
119 					if(x.isAutomatic()!=null && x.isAutomatic() )
120 					{
121 						//Automatic assignment
122 						lisDescriptions.add(
123 								new LuteceUserRoleDescription(role, LuteceUserRoleDescription.TYPE_AUTOMATIC_ASSIGNMENT,
124 										I18nService.getLocalizedString(PROPERTY_PAGE_ROLE_DESCRIPTION_MESSAGE_AUTOMATIC,locale)));
125 				
126 					}
127 					else
128 					{
129 					//conditional assignment
130 				 	lisDescriptions.add(
131 							new LuteceUserRoleDescription(role, LuteceUserRoleDescription.TYPE_CONDITIONAL_ASSIGNMENT,
132 									I18nService.getLocalizedString(PROPERTY_PAGE_ROLE_DESCRIPTION_MESSAGE, new Object[]{x.getLuteceUserAttributeKey(), x.getLuteceUserAttributeValue()},locale)));
133 					}
134 			     }
135 				else
136 				{
137 					Role roleEmty=new Role();
138 					roleEmty.setRole(x.getRole());
139 					lisDescriptions.add(
140 							new LuteceUserRoleDescription(roleEmty, LuteceUserRoleDescription.TYPE_CONDITIONAL_ASSIGNMENT,
141 									I18nService.getLocalizedString(PROPERTY_PAGE_ROLE_DESCRIPTION_ERROR,locale)));
142 	
143 					
144 				}
145 
146 			}
147 
148 			);
149         }
150     	
151     	
152     	return lisDescriptions;
153     	
154     }
155     
156     
157     public List<AutomaticRoleConfiguration> getListAutomaticRoleConfiguration() {
158 		return _listAutomaticRoleConfiguration;
159 	}
160 
161        
162     
163     
164 }