Initial OpenECOMP policy/engine commit
[policy/engine.git] / ecomp-sdk-app / src / main / java / org / openecomp / portalapp / service / OnBoardingApiServiceImplPolicy.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ECOMP Policy Engine
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21
22 package org.openecomp.portalapp.service;
23
24 import java.util.ArrayList;
25 import java.util.Iterator;
26 import java.util.List;
27 import java.util.Set;
28 import java.util.SortedSet;
29 import java.util.TreeSet;
30
31 import javax.servlet.http.HttpServletRequest;
32
33 import org.openecomp.portalsdk.core.domain.Role;
34 import org.openecomp.portalsdk.core.domain.User;
35 import org.openecomp.portalsdk.core.domain.UserApp;
36 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
37 import org.openecomp.portalsdk.core.onboarding.client.AppContextManager;
38 import org.openecomp.portalsdk.core.onboarding.crossapi.IPortalRestAPIService;
39 import org.openecomp.portalsdk.core.onboarding.crossapi.PortalAPIException;
40 import org.openecomp.portalsdk.core.onboarding.crossapi.PortalTimeoutHandler;
41 import org.openecomp.portalsdk.core.restful.domain.EcompRole;
42 import org.openecomp.portalsdk.core.restful.domain.EcompUser;
43 import org.openecomp.portalsdk.core.service.RoleService;
44 import org.openecomp.portalsdk.core.service.UserProfileService;
45 import org.openecomp.portalsdk.core.service.WebServiceCallService;
46 import org.openecomp.portalsdk.core.util.JSONUtil;
47 import org.openecomp.portalsdk.core.util.SystemProperties;
48 import org.openecomp.portalsdk.core.web.support.UserUtils;
49 import org.slf4j.MDC;
50
51
52 public class OnBoardingApiServiceImplPolicy implements IPortalRestAPIService {
53         RoleService roleService;
54         UserProfileService userProfileService;
55         AdminAuthExtension adminAuthExtension;
56         
57         EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(OnBoardingApiServiceImplPolicy.class);
58         
59         public OnBoardingApiServiceImplPolicy(){
60                 roleService = AppContextManager.getAppContext().getBean(RoleService.class);
61                 userProfileService =  AppContextManager.getAppContext().getBean(UserProfileService.class);
62                 adminAuthExtension = AppContextManager.getAppContext().getBean(AdminAuthExtension.class);
63         }
64
65         private void setCurrentAttributes(User user, EcompUser userJson){
66                 user.setEmail(userJson.getEmail());
67                 user.setFirstName(userJson.getFirstName());
68                 user.setHrid(userJson.getHrid());
69                 user.setJobTitle(userJson.getJobTitle());
70                 user.setLastName(userJson.getLastName());
71                 user.setLoginId(userJson.getLoginId());
72                 user.setOrgManagerUserId(userJson.getOrgManagerUserId());
73                 user.setMiddleInitial(userJson.getMiddleInitial());
74                 user.setOrgCode(userJson.getOrgCode());
75                 user.setOrgId(userJson.getOrgId());
76                 user.setPhone(userJson.getPhone());
77                 user.setOrgUserId(userJson.getOrgUserId());             
78                 user.setActive(userJson.isActive());
79         }
80         
81         
82         @Override
83         public void pushUser(EcompUser userJson) throws PortalAPIException {
84                 
85                 logger.debug(EELFLoggerDelegate.debugLogger, "pushUser was invoked" + userJson);
86                 
87                 User user = new User();
88                 String response = "";
89
90                 logger.debug(EELFLoggerDelegate.debugLogger, "## REST API ## userJson: " + userJson);
91
92                 try {
93                         
94                         //Set input attributes to the object about to be saved
95                         setCurrentAttributes(user, userJson);
96                         
97                         user.setRoles(new TreeSet());
98                         user.setUserApps(new TreeSet());
99                         user.setPseudoRoles(new TreeSet());
100
101                         userProfileService.saveUser(user);
102                         adminAuthExtension.saveUserExtension(user);
103                         logger.debug(EELFLoggerDelegate.debugLogger, "push user success.");
104                         response = "push user success.";
105                         response = JSONUtil.convertResponseToJSON(response);
106                 } catch (Exception e) {
107                         e.printStackTrace();
108                         response = "push user failed with error: " + e.getMessage();
109                         logger.error(EELFLoggerDelegate.debugLogger, response);
110                         logger.error(EELFLoggerDelegate.errorLogger, "Error happened during OnboardingApiService.pushUser operation: " + response);
111                         logger.error(EELFLoggerDelegate.debugLogger, "Error happened during OnboardingApiService.pushUser operation: " + response);
112                 logger.info(EELFLoggerDelegate.metricsLogger, "OnboardingApiService.pushUser operation has failed.");
113                         throw new PortalAPIException(response, e);
114                 }finally {
115                         MDC.remove(SystemProperties.MDC_TIMER);
116                 }
117         }
118
119         @Override
120         public void editUser(String loginId, EcompUser userJson) throws PortalAPIException {
121                 
122                 logger.debug(EELFLoggerDelegate.debugLogger, "OnboardingApi editUser was invoked" + userJson);
123         
124                 User editUser = new User();
125                 String response = "";
126                 logger.debug(EELFLoggerDelegate.debugLogger, "## REST API ## loginId: " + loginId);
127                 logger.debug(EELFLoggerDelegate.debugLogger, "## REST API ## userJson: " + userJson);
128
129                 try {
130
131                         setCurrentAttributes(editUser, userJson);
132                         
133                         if (editUser.getOrgUserId() != null) {
134                                 editUser.setLoginId(editUser.getOrgUserId());
135                         }
136
137                         User domainUser = userProfileService.getUserByLoginId(loginId);
138                         if (domainUser != null)
139                                 domainUser = JSONUtil.mapToDomainUser(domainUser, editUser);
140                         else
141                                 domainUser = editUser;
142                         userProfileService.saveUser(domainUser);
143                         adminAuthExtension.saveUserExtension(domainUser);
144
145                         logger.debug(EELFLoggerDelegate.debugLogger, "edit user success.");
146                         response = "edit user success.";
147                         response = JSONUtil.convertResponseToJSON(response);
148                 } catch (Exception e) {
149                         e.printStackTrace();
150                         response = "edit user failed with error: " + e.getMessage();
151                         logger.error(EELFLoggerDelegate.errorLogger, response);
152                         logger.error(EELFLoggerDelegate.debugLogger, "Error happened during OnboardingApiService.editUser operation: " + response);
153                         logger.error(EELFLoggerDelegate.errorLogger, "Error happened during OnboardingApiService.editUser operation: " + response);
154                         throw new PortalAPIException(response, e);
155                 }finally {
156                         MDC.remove(SystemProperties.MDC_TIMER);
157                 }
158
159                 //return response;      
160         }
161
162         @Override
163         public EcompUser getUser(String loginId) throws PortalAPIException {
164                 try{
165                         logger.debug(EELFLoggerDelegate.debugLogger, "## REST API ## loginId: " + loginId);
166                 
167                         User user = userProfileService.getUserByLoginId(loginId);
168                         
169                         if(user == null){
170                                 logger.info(EELFLoggerDelegate.debugLogger, "User + " + loginId + " doesn't exist");
171                                 return null;
172                         }
173                         else    
174                                 return UserUtils.convertToEcompUser(user);
175                 }
176                 catch(Exception e){
177                         logger.error(EELFLoggerDelegate.errorLogger, e.getMessage());
178                         return null;    
179                 }
180
181         }
182
183         @Override
184         public List<EcompUser> getUsers() throws PortalAPIException {
185
186
187                 String response = "";
188                 
189                 try {
190                         
191                         List<User> users = userProfileService.findAllActive();
192                         List<EcompUser> ecompUsers = new ArrayList<EcompUser>();
193                         for(User user : users)
194                                 ecompUsers.add(UserUtils.convertToEcompUser(user));
195                         
196                         return ecompUsers;
197                 
198                 }
199                 catch (Exception pe){
200                         
201                         response = "getUsers failed with error: " + pe.getMessage();
202                         pe.printStackTrace();
203                         logger.error(EELFLoggerDelegate.debugLogger, response);
204                         logger.error(EELFLoggerDelegate.errorLogger, response);
205                         throw new PortalAPIException(response, pe);
206                 }
207                 
208                 
209         }
210
211         @Override
212         public List<EcompRole> getAvailableRoles() throws PortalAPIException{
213
214                 String response = "";
215                 
216                 try{
217                 List<Role> roles = roleService.getActiveRoles();
218                 List<EcompRole> ecompRoles = new ArrayList<EcompRole>();
219                 
220                 for(Role role : roles)
221                         ecompRoles.add(UserUtils.convertToEcompRole(role));
222                 
223                 return ecompRoles;
224                 
225                 }
226                 catch (Exception pe){
227                         response = "getUsers failed with error: " + pe.getMessage();
228                         pe.printStackTrace();
229                         logger.error(EELFLoggerDelegate.debugLogger, response);
230                         logger.error(EELFLoggerDelegate.errorLogger, response);
231                         throw new PortalAPIException(response, pe);
232                 }       
233         }
234
235         @Override
236         public void pushUserRole(String loginId, List<EcompRole> rolesJson) throws PortalAPIException {
237                 
238         
239                 String response = "";
240                 try {
241                         logger.debug(EELFLoggerDelegate.debugLogger, "## REST API ## loginId: " + loginId);
242                         logger.debug(EELFLoggerDelegate.debugLogger, "## REST API ## rolesJson: " + rolesJson);
243                         User user = userProfileService.getUserByLoginId(loginId);
244
245                         SortedSet<Role> roles = new TreeSet();
246                         for (EcompRole role : rolesJson) {
247                                 roles.add(roleService.getRole(role.getId()));
248                         }
249                         // Replace existing roles with new ones
250                         replaceExistingRoles(roles, user);
251
252                         logger.debug(EELFLoggerDelegate.debugLogger, "push user role success.");
253                         response = "push user role success.";
254                         response = JSONUtil.convertResponseToJSON(response);
255
256                 } catch (Exception e) {
257                         response = "pushUserRole failed with error: " + e.getMessage();
258                         e.printStackTrace();
259                         logger.error(EELFLoggerDelegate.debugLogger, response);
260                         logger.error(EELFLoggerDelegate.errorLogger, response);
261                         throw new PortalAPIException(response, e);
262                 }finally {
263                         MDC.remove(SystemProperties.MDC_TIMER);
264                 }
265
266         }
267
268         @Override
269         public List<EcompRole> getUserRoles(String loginId) throws PortalAPIException {
270                 
271                 logger.debug(EELFLoggerDelegate.debugLogger, "## REST API ## loginId: " + loginId);
272                 
273                 List<EcompRole> ecompRoles = new ArrayList<EcompRole>();
274                 try {
275                         
276                         
277                         User user = userProfileService.getUserByLoginId(loginId);
278                         
279                         SortedSet<Role> currentRoles = null;
280                         if(user != null){
281                                 
282                                 currentRoles = user.getRoles();
283                                 
284                                 if(currentRoles != null)
285                                 for(Role role : currentRoles)
286                                         ecompRoles.add(UserUtils.convertToEcompRole(role));
287                         }
288                         return ecompRoles;
289                 }
290                 catch (Exception e){
291                         String response = "getUserRoles failed with error: " + e.getMessage();
292                         e.printStackTrace();
293                         logger.error(EELFLoggerDelegate.debugLogger, response);
294                         logger.debug(EELFLoggerDelegate.errorLogger, response);
295                         throw new PortalAPIException(response, e);
296                 }
297         }
298
299         private void replaceExistingRoles(SortedSet<Role> roles, User user) {
300                 // 1. remove existing roles
301                 Set<UserApp> userApps = user.getUserApps();
302                 Iterator appsItr = (Iterator) userApps.iterator();
303                 while (appsItr.hasNext()) {
304                         UserApp tempUserApp = (UserApp)appsItr.next();
305                         boolean roleFound = false;
306                         for (Role role : roles) {
307                                 if (tempUserApp.getRole().getId().equals(role.getId())) {
308                                         roleFound = true;
309                                         break;
310                                 }
311                         }
312                         if (!roleFound)
313                                 appsItr.remove();
314                 }
315                 user.setUserApps(userApps);
316                 userProfileService.saveUser(user);
317
318                 // 2. add new roles
319                 user.setRoles(roles);
320                 userProfileService.saveUser(user);
321                 adminAuthExtension.saveUserExtension(user);
322         }
323
324
325         @Override
326         public boolean isAppAuthenticated(HttpServletRequest request) throws PortalAPIException {
327                 WebServiceCallService securityService = AppContextManager.getAppContext().getBean(WebServiceCallService.class);
328                 try {
329                         String appUser = request.getHeader("username");
330                         String password = request.getHeader("password");
331                         boolean flag = securityService.verifyRESTCredential(null, appUser, password);           
332                         return flag;
333                         
334                 } catch (Exception e) {
335                         logger.error(EELFLoggerDelegate.errorLogger, "Failed to authenticate" + e.getMessage());
336                         throw new PortalAPIException("Failed to authenticate: " + e.getMessage());                      
337                 }
338                 
339         }
340
341         public String getSessionTimeOuts() throws Exception{
342                 return PortalTimeoutHandler.gatherSessionExtensions();
343         }
344         
345         public void updateSessionTimeOuts(String sessionMap) throws Exception{
346                 PortalTimeoutHandler.updateSessionExtensions(sessionMap);
347         }
348 }