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   	
35  package fr.paris.lutece.plugins.mylutece.web;
36  
37  import java.util.Collection;
38  import java.util.HashMap;
39  import java.util.List;
40  import java.util.Map;
41  
42  import javax.servlet.http.HttpServletRequest;
43  
44  import fr.paris.lutece.api.user.User;
45  import fr.paris.lutece.plugins.mylutece.authentication.MultiLuteceAuthentication;
46  import fr.paris.lutece.plugins.mylutece.business.LuteceUserRoleDescription;
47  import fr.paris.lutece.plugins.mylutece.service.ILuteceUserRolesProvidedDescription;
48  import fr.paris.lutece.plugins.mylutece.service.IMyLuteceExternalIdentityProviderService;
49  import fr.paris.lutece.plugins.mylutece.service.IMyLuteceExternalRolesProvider;
50  import fr.paris.lutece.plugins.mylutece.service.MyLuteceExternalIdentityService;
51  import fr.paris.lutece.plugins.mylutece.service.MyluteceExternalRoleService;
52  import fr.paris.lutece.plugins.mylutece.service.RoleResourceIdService;
53  import fr.paris.lutece.portal.business.user.AdminUser;
54  import fr.paris.lutece.portal.service.rbac.RBACService;
55  import fr.paris.lutece.portal.service.security.LuteceAuthentication;
56  import fr.paris.lutece.portal.service.security.SecurityService;
57  import fr.paris.lutece.portal.service.workgroup.AdminWorkgroupService;
58  import fr.paris.lutece.portal.util.mvc.admin.annotations.Controller;
59  import fr.paris.lutece.portal.util.mvc.commons.annotations.View;
60  
61  /**
62   * This class provides the user interface to manage Administration features ( manage, create, modify, remove )
63   */
64  @Controller( controllerJsp = "ManageMylutece.jsp", controllerPath = "jsp/admin/plugins/mylutece/", right = "MYLUTECE_MANAGEMENT" )
65  public class ManageMyLuteceJspBean extends AbstractManageMyluteceJspBean
66  {
67      // Templates
68      private static final String TEMPLATE_MANAGE_MYLUTECE = "/admin/plugins/mylutece/manage_mylutece.html";
69     
70  
71      // Properties for page titles
72      private static final String PROPERTY_PAGE_TITLE_MANAGE_MYLUTECE = "mylutece.adminFeature.mylutece_management.name";
73    
74    
75      // Views
76      private static final String VIEW_MANAGE_MYLUTECE = "manageMylutece";
77     
78      //MARKERS
79      private static final String MARK_LUTECE_AUTHENTICATION = "authentication";
80      private static final String MARK_MAP_AUTH_ROLE_DESCRIPTION= "map_auth_role_description";
81      private static final String MARK_MAP_EXTERNAL_PROVIDER_ROLE_DESCRIPTION= "map_external_provider_role_description";
82      private static final String MARK_LOCALE = "locale";
83      
84      
85      
86      private static final String MARK_EXTERNAL_ROLE_PROVIDERS= "external_roles_providers";
87      private static final String MARK_EXTERNAL_IDENTITY_PROVIDERS= "external_identity_providers";
88      
89      
90      
91      
92      
93  
94      
95      /**
96       * Build the Manage View
97       * @param request The HTTP request
98       * @return The page
99       */
100     @View( value = VIEW_MANAGE_MYLUTECE, defaultView = true )
101     public String getManageMylutece( HttpServletRequest request )
102     {
103     	
104     	Map<String,Collection<LuteceUserRoleDescription>> mapAuthRolesDescrition=new HashMap<String, Collection<LuteceUserRoleDescription>>();
105     	Map<String,Collection<LuteceUserRoleDescription>> mapExternalProviderRolesDescription=new HashMap<String, Collection<LuteceUserRoleDescription>>();
106     	
107     	LuteceAuthentication luteceAuthentication=SecurityService.getInstance().getAuthenticationService();
108     	
109     	//filter role description by user permission
110     	if(luteceAuthentication.isMultiAuthenticationSupported())
111     	{
112     		for(LuteceAuthentication multiAuth:((MultiLuteceAuthentication)luteceAuthentication).getListLuteceAuthentication())
113     		{
114     			if(multiAuth instanceof ILuteceUserRolesProvidedDescription )
115     			{
116     				mapAuthRolesDescrition.put(multiAuth.getAuthServiceName(),filterRolesDescriptionByUser((ILuteceUserRolesProvidedDescription)multiAuth));
117     			}
118     		}
119     		
120     	}
121     	else
122     	{
123     		if(luteceAuthentication instanceof ILuteceUserRolesProvidedDescription )
124 			{
125     			mapAuthRolesDescrition.put(luteceAuthentication.getAuthServiceName(),filterRolesDescriptionByUser((ILuteceUserRolesProvidedDescription)luteceAuthentication));
126 			}
127     		
128     	}
129     	
130     	List<IMyLuteceExternalRolesProvider>  listMyluteceExternalRolesProvider= MyluteceExternalRoleService.getInstance().getProviders();
131     	List<IMyLuteceExternalIdentityProviderService>  listMyluteceExternalIdentiryProvider= MyLuteceExternalIdentityService.getInstance().getProviders();
132     	
133     	 int nCpt=0;
134  		//filter role description
135     	 for(IMyLuteceExternalRolesProvider externalRoleProvider: listMyluteceExternalRolesProvider)
136 		 {
137 			mapExternalProviderRolesDescription.put(Integer.toString(nCpt++),filterRolesDescriptionByUser(externalRoleProvider));
138 			
139 		}
140     	
141     	
142     	 Map<String, Object> model = getModel(  );
143     	 model.put( MARK_LOCALE, getLocale( ) );
144     	 
145     	 
146     	 model.put(MARK_LUTECE_AUTHENTICATION, luteceAuthentication);
147     	 model.put(MARK_EXTERNAL_ROLE_PROVIDERS, listMyluteceExternalRolesProvider);
148     	 model.put(MARK_EXTERNAL_IDENTITY_PROVIDERS, listMyluteceExternalIdentiryProvider);
149       	 model.put(MARK_MAP_AUTH_ROLE_DESCRIPTION, mapAuthRolesDescrition);
150     	 model.put(MARK_MAP_EXTERNAL_PROVIDER_ROLE_DESCRIPTION, mapExternalProviderRolesDescription);
151     	 
152     	 
153     	
154     	 
155     	
156     	 
157         return getPage( PROPERTY_PAGE_TITLE_MANAGE_MYLUTECE, TEMPLATE_MANAGE_MYLUTECE, model );
158     }
159     
160     
161     private <T extends ILuteceUserRolesProvidedDescription> Collection<LuteceUserRoleDescription> filterRolesDescriptionByUser( T luteceUserRolesProvidedDescription)
162     {
163     	
164     	Collection<LuteceUserRoleDescription>  rolesDescription=luteceUserRolesProvidedDescription.getLuteceUserRolesProvided(getLocale());
165     	if(rolesDescription!=null)
166     	{
167     		rolesDescription = RBACService.getAuthorizedCollection( rolesDescription, RoleResourceIdService.PERMISSION_ASSIGN_ROLE, (User) getUser() );
168     		rolesDescription = AdminWorkgroupService.getAuthorizedCollection( rolesDescription, (User) getUser( ) );
169     	}
170     	return rolesDescription;
171     }
172 
173 }