2f17ac6868035a928eeacea8b7b209dc8108d0e7
[portal/sdk.git] /
1 /*-
2  * ================================================================================
3  * ECOMP Portal SDK
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property
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  * ================================================================================
19  */
20 package org.openecomp.portalapp.controller.core;
21
22 import java.io.IOException;
23 import java.io.PrintWriter;
24 import java.io.UnsupportedEncodingException;
25 import java.util.HashMap;
26 import java.util.List;
27 import java.util.Map;
28
29 import javax.servlet.http.HttpServletRequest;
30 import javax.servlet.http.HttpServletResponse;
31 import javax.servlet.http.HttpSession;
32
33 import org.json.JSONObject;
34 import org.openecomp.portalsdk.core.controller.RestrictedBaseController;
35 import org.openecomp.portalsdk.core.domain.Role;
36 import org.openecomp.portalsdk.core.domain.User;
37 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
38 import org.openecomp.portalsdk.core.service.RoleService;
39 import org.openecomp.portalsdk.core.service.UserProfileService;
40 import org.openecomp.portalsdk.core.service.UserService;
41 import org.openecomp.portalsdk.core.util.SystemProperties;
42 import org.openecomp.portalsdk.core.web.support.AppUtils;
43 import org.openecomp.portalsdk.core.web.support.JsonMessage;
44 import org.openecomp.portalsdk.core.web.support.UserUtils;
45 import org.springframework.beans.factory.annotation.Autowired;
46 import org.springframework.stereotype.Controller;
47 import org.springframework.web.bind.annotation.RequestMapping;
48 import org.springframework.web.bind.annotation.RequestMethod;
49 import org.springframework.web.servlet.ModelAndView;
50
51 import com.fasterxml.jackson.databind.DeserializationFeature;
52 import com.fasterxml.jackson.databind.JsonNode;
53 import com.fasterxml.jackson.databind.ObjectMapper;
54
55 @Controller
56 @RequestMapping("/")
57 public class ProfileController extends RestrictedBaseController {
58
59         private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ProfileController.class);
60
61         @Autowired
62         UserProfileService service;
63         
64         @Autowired
65         UserService userService;
66         
67         @Autowired
68         RoleService roleService;
69
70         private String viewName;
71         
72         @RequestMapping(value = { "/profile" }, method = RequestMethod.GET)
73         public ModelAndView profile(HttpServletRequest request, HttpServletResponse response) throws Exception{
74                 Map<String, Object> model = new HashMap<String, Object>();
75                 ObjectMapper mapper = new ObjectMapper();
76                 User user = UserUtils.getUserSession(request);
77
78                 User profile = null;
79                 Long profileId = null;
80
81                 if (request.getRequestURI().indexOf("self_profile.htm") > -1) {
82                         profile = UserUtils.getUserSession(request);
83                         profileId = profile.getId();
84                 } else {
85                         profileId = Long.parseLong(request.getParameter("profile_id"));
86                         profile = (User) userService.getUser(String.valueOf(profileId));
87                 }
88
89                 try {
90                         model.put("stateList", mapper.writeValueAsString(getStates()));
91                         model.put("countries", mapper.writeValueAsString(getCountries()));
92                         model.put("timeZones", mapper.writeValueAsString(getTimeZones()));
93                         model.put("availableRoles", mapper.writeValueAsString(getAvailableRoles(user.getOrgUserId())));
94                         model.put("profile", mapper.writeValueAsString(profile));
95                         model.put("profileId", mapper.writeValueAsString(profileId));
96                 } catch (Exception e) {
97                         logger.error(EELFLoggerDelegate.errorLogger, "profile: failed to write JSON", e);
98                 }
99                 return new ModelAndView("profile", "model", model);
100         }
101
102         @RequestMapping(value = { "/self_profile" }, method = RequestMethod.GET)
103         public ModelAndView self_profile(HttpServletRequest request) throws Exception{
104                 Map<String, Object> model = new HashMap<String, Object>();
105                 ObjectMapper mapper = new ObjectMapper();
106
107                 User profile = null;
108                 Long profileId = null;
109                 User user = UserUtils.getUserSession(request);
110
111                 profile = UserUtils.getUserSession(request);
112                 try {
113                         model.put("stateList", mapper.writeValueAsString(getStates()));
114                         model.put("countries", mapper.writeValueAsString(getCountries()));
115                         model.put("timeZones", mapper.writeValueAsString(getTimeZones()));
116                         model.put("availableRoles", mapper.writeValueAsString(getAvailableRoles(user.getOrgUserId())));
117                         model.put("profile", mapper.writeValueAsString(profile));
118                         model.put("profileId", mapper.writeValueAsString(profileId));
119                 } catch (Exception e) {
120                         logger.error(EELFLoggerDelegate.errorLogger, "self_profile: failed to write JSON" + e.getMessage());
121                 }
122                 return new ModelAndView("profile", "model", model);
123         }
124
125         @RequestMapping(value = { "/get_self_profile" }, method = RequestMethod.GET)
126         public void getSelfProfile(HttpServletRequest request, HttpServletResponse response) throws Exception{
127                 Map<String, Object> model = new HashMap<String, Object>();
128                 ObjectMapper mapper = new ObjectMapper();
129                 User user = UserUtils.getUserSession(request);
130
131                 User profile = null;
132                 Long profileId = null;
133
134                 profile = (User) UserUtils.getUserSession(request);     
135                 try {
136                         model.put("stateList", mapper.writeValueAsString(getStates()));
137                         model.put("countries", mapper.writeValueAsString(getCountries()));
138                         model.put("timeZones", mapper.writeValueAsString(getTimeZones()));
139                         model.put("availableRoles", mapper.writeValueAsString(getAvailableRoles(user.getOrgUserId())));
140                         model.put("profile", mapper.writeValueAsString(profile));
141                         model.put("profileId", mapper.writeValueAsString(profileId));
142                         JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
143                         JSONObject j = new JSONObject(msg);
144                         response.getWriter().write(j.toString());
145                 } catch (Exception e) {
146                         logger.error(EELFLoggerDelegate.errorLogger, "getSelfProfile: failed to write JSON" + e.getMessage());
147                 }
148
149         }
150
151         @RequestMapping(value = { "/get_profile" }, method = RequestMethod.GET)
152         public void GetUser(HttpServletRequest request, HttpServletResponse response) {
153                 Map<String, Object> model = new HashMap<String, Object>();
154                 User user = UserUtils.getUserSession(request);
155                 ObjectMapper mapper = new ObjectMapper();
156                 try {
157                         User profile = null;
158                         Long profileId = null;
159                         if (request.getRequestURI().indexOf("self_profile.htm") > -1) {
160                                 profile = UserUtils.getUserSession(request);
161                                 profileId = profile.getId();
162                         } else {
163                                 profileId = Long.parseLong(request.getParameter("profile_id"));
164                                 profile = (User) userService.getUser(String.valueOf(profileId));
165                                 
166                         }
167                         model.put("stateList", mapper.writeValueAsString(getStates()));
168                         model.put("countries", mapper.writeValueAsString(getCountries()));
169                         model.put("timeZones", mapper.writeValueAsString(getTimeZones()));
170                         model.put("availableRoles", mapper.writeValueAsString(getAvailableRoles(user.getOrgUserId())));
171                         model.put("profile", mapper.writeValueAsString(profile));
172                         model.put("profileId", mapper.writeValueAsString(profileId));
173                         JsonMessage msg = new JsonMessage(mapper.writeValueAsString(model));
174                         JSONObject j = new JSONObject(msg);
175                         response.getWriter().write(j.toString());
176
177                 } catch (Exception e) {
178                         logger.error(EELFLoggerDelegate.errorLogger, "GetUser: failed to write JSON" + e.getMessage());
179                 }
180         }
181
182         @RequestMapping(value = { "/profile/saveProfile" }, method = RequestMethod.POST)
183         public ModelAndView saveProfile(HttpServletRequest request, HttpServletResponse response) {
184                 logger.info(EELFLoggerDelegate.debugLogger, "ProfileController.save");
185                 try {
186
187                         ObjectMapper mapper = new ObjectMapper();
188                         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
189                         JsonNode root = mapper.readTree(request.getReader());
190                         User user = mapper.readValue(root.get("profile").toString(), User.class);
191
192                         String selectedCountry = mapper.readValue(root.get("selectedCountry").toString(), String.class);
193                         String selectedState = mapper.readValue(root.get("selectedState").toString(), String.class);
194                         String selectedTimeZone = mapper.readValue(root.get("selectedTimeZone").toString(), String.class);
195
196                         Long profileId = Long.parseLong(request.getParameter("profile_id"));
197
198                         User domainUser = (User) userService.getUser(String.valueOf(profileId));
199                         // user.setRoles(domainUser.getRoles());
200                         user.setPseudoRoles(domainUser.getPseudoRoles());
201                         user.setUserApps(domainUser.getUserApps());
202                         if (!selectedCountry.equals("")) {
203                                 user.setCountry(selectedCountry);
204                         }
205                         if (!selectedState.equals("")) {
206                                 user.setState(selectedState);
207                         }
208                         if (!selectedTimeZone.equals("")) {
209                                 user.setTimeZoneId(Long.parseLong(selectedTimeZone));
210                         }
211                         service.saveUser(user);
212                         logger.info(EELFLoggerDelegate.auditLogger, "Save user's profile for user " + profileId);
213
214                         response.setCharacterEncoding("UTF-8");
215                         response.setContentType("application / json");
216                         request.setCharacterEncoding("UTF-8");
217
218                         PrintWriter out = response.getWriter();
219                         out.write("" + profileId);
220                         return null;
221                 } catch (Exception e) {
222                         response.setCharacterEncoding("UTF-8");
223                         try {
224                                 request.setCharacterEncoding("UTF-8");
225                         } catch (UnsupportedEncodingException e1) {
226
227                                 e1.printStackTrace();
228
229                         }
230                         PrintWriter out = null;
231                         try {
232                                 out = response.getWriter();
233                         } catch (IOException e1) {
234                                 logger.error(EELFLoggerDelegate.errorLogger, "saveProfile: failed to get writer" + e1.getMessage());
235                         }
236                         out.write(e.getMessage());
237                         return null;
238                 }
239         }
240
241         @RequestMapping(value = { "/profile/removeRole" }, method = RequestMethod.POST)
242         public ModelAndView removeRole(HttpServletRequest request, HttpServletResponse response) throws Exception {
243
244                 logger.info(EELFLoggerDelegate.debugLogger, "ProfileController.save");
245                 try {
246
247                         ObjectMapper mapper = new ObjectMapper();
248                         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
249                         JsonNode root = mapper.readTree(request.getReader());
250                         Role role = mapper.readValue(root.get("role").toString(), Role.class);
251
252                          String profileId = request.getParameter("profile_id");
253
254                         User domainUser = (User) userService.getUser(profileId);
255
256                         domainUser.removeRole(role.getId());
257
258                         service.saveUser(domainUser);
259                         /*If adding new roles on the current logged in user, we need to update the user value in session*/
260                         if(UserUtils.getUserId(request)==Integer.valueOf(profileId)){
261                                 HttpSession session = request.getSession(true);
262                                 session.setAttribute(SystemProperties.getProperty(SystemProperties.USER_ATTRIBUTE_NAME), domainUser);
263                         }
264                         logger.info(EELFLoggerDelegate.auditLogger, "Remove role " + role.getId() + " from user " + profileId);
265
266                         response.setCharacterEncoding("UTF-8");
267                         response.setContentType("application / json");
268                         request.setCharacterEncoding("UTF-8");
269
270                         PrintWriter out = response.getWriter();
271
272                         Map<String, Object> model = new HashMap<String, Object>();
273                         model.put("profile", mapper.writeValueAsString(domainUser));
274                         JSONObject j = new JSONObject(mapper.writeValueAsString(domainUser));
275
276                         out.write(j.toString());
277
278                         return null;
279                 } catch (Exception e) {
280                         logger.error(EELFLoggerDelegate.errorLogger, "removeRole" + e.getMessage());
281                         response.setCharacterEncoding("UTF-8");
282                         request.setCharacterEncoding("UTF-8");
283                         PrintWriter out = response.getWriter();
284                         out.write(e.getMessage());
285                         return null;
286                 }
287
288         }
289
290         @RequestMapping(value = { "/profile/addNewRole" }, method = RequestMethod.POST)
291         public ModelAndView addNewRole(HttpServletRequest request, HttpServletResponse response) throws Exception {
292
293                 logger.info(EELFLoggerDelegate.debugLogger, "ProfileController.save" );
294                 try {
295
296                         ObjectMapper mapper = new ObjectMapper();
297                         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
298                         JsonNode root = mapper.readTree(request.getReader());
299                         Role role = mapper.readValue(root.get("role").toString(), Role.class);
300                         String profileId = request.getParameter("profile_id");
301                         User domainUser = (User) userService.getUser(profileId);
302                         domainUser.addRole(role);
303                         service.saveUser(domainUser);
304                         /*If removing roles on the current logged in user, we need to update the user value in session*/
305                         if(UserUtils.getUserId(request)==Integer.valueOf(profileId)){
306                                 HttpSession session = request.getSession(true);
307                                 session.setAttribute(SystemProperties.getProperty(SystemProperties.USER_ATTRIBUTE_NAME), domainUser);
308                         }
309                         logger.info(EELFLoggerDelegate.auditLogger, "Add new role " + role.getName() + " to user " + profileId);
310
311                         response.setCharacterEncoding("UTF-8");
312                         response.setContentType("application / json");
313                         request.setCharacterEncoding("UTF-8");
314
315                         PrintWriter out = response.getWriter();
316                         Map<String, Object> model = new HashMap<String, Object>();
317                         model.put("profile", mapper.writeValueAsString(domainUser));
318                         JSONObject j = new JSONObject(mapper.writeValueAsString(domainUser));
319
320                         out.write(j.toString());
321
322                         return null;
323                 } catch (Exception e) {
324                         logger.error(EELFLoggerDelegate.errorLogger, "addNewRole" + e.getMessage());
325                         response.setCharacterEncoding("UTF-8");
326                         request.setCharacterEncoding("UTF-8");
327                         PrintWriter out = response.getWriter();
328                         out.write(e.getMessage());
329                         return null;
330                 }
331
332         }
333
334         public String getViewName() {
335                 return viewName;
336         }
337
338         public void setViewName(String viewName) {
339                 this.viewName = viewName;
340         }
341
342         @SuppressWarnings("rawtypes")
343         public List getStates() {
344                 return AppUtils.getLookupList("FN_LU_STATE", "STATE_CD", "STATE", null, "STATE_CD");
345         }
346
347         @SuppressWarnings("rawtypes")
348         public List getCountries() {
349                 return AppUtils.getLookupList("FN_LU_COUNTRY", "COUNTRY_CD", "COUNTRY", null, "COUNTRY");
350         }
351
352         @SuppressWarnings("rawtypes")
353         public List getTimeZones() {
354                 return AppUtils.getLookupList("FN_LU_TIMEZONE", "TIMEZONE_ID", "TIMEZONE_NAME", null, "TIMEZONE_NAME");
355         }
356
357         @SuppressWarnings("rawtypes")
358         public List getAvailableRoles(String requestedLoginId) throws Exception {
359                 return roleService.getAvailableRoles(requestedLoginId);
360         }
361
362 }