2 * ============LICENSE_START==========================================
4 * ===================================================================
5 * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6 * ===================================================================
7 * Modifications Copyright (c) 2019 Samsung
8 * ===================================================================
10 * Unless otherwise specified, all software contained herein is licensed
11 * under the Apache License, Version 2.0 (the "License");
12 * you may not use this software except in compliance with the License.
13 * You may obtain a copy of the License at
15 * http://www.apache.org/licenses/LICENSE-2.0
17 * Unless required by applicable law or agreed to in writing, software
18 * distributed under the License is distributed on an "AS IS" BASIS,
19 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20 * See the License for the specific language governing permissions and
21 * limitations under the License.
23 * Unless otherwise specified, all documentation contained herein is licensed
24 * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
25 * you may not use this documentation except in compliance with the License.
26 * You may obtain a copy of the License at
28 * https://creativecommons.org/licenses/by/4.0/
30 * Unless required by applicable law or agreed to in writing, documentation
31 * distributed under the License is distributed on an "AS IS" BASIS,
32 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
33 * See the License for the specific language governing permissions and
34 * limitations under the License.
36 * ============LICENSE_END============================================
40 package org.onap.portalapp.portal.controller;
42 import com.fasterxml.jackson.core.JsonProcessingException;
43 import com.fasterxml.jackson.databind.ObjectMapper;
44 import java.io.IOException;
45 import java.util.List;
47 import javax.servlet.http.HttpServletRequest;
48 import javax.servlet.http.HttpServletResponse;
50 import lombok.NoArgsConstructor;
51 import org.onap.portalapp.controller.EPRestrictedBaseController;
52 import org.onap.portalapp.portal.domain.AdminUserApplications;
53 import org.onap.portalapp.portal.domain.AppIdAndNameTransportModel;
54 import org.onap.portalapp.portal.domain.AppsResponse;
55 import org.onap.portalapp.portal.domain.EPApp;
56 import org.onap.portalapp.portal.domain.EPUser;
57 import org.onap.portalapp.portal.domain.EcompApp;
58 import org.onap.portalapp.portal.domain.UserRoles;
59 import org.onap.portalapp.portal.exceptions.InvalidApplicationException;
60 import org.onap.portalapp.portal.logging.aop.EPAuditLog;
61 import org.onap.portalapp.portal.logging.logic.EPLogUtil;
62 import org.onap.portalapp.portal.service.AdminRolesService;
63 import org.onap.portalapp.portal.service.EPAppService;
64 import org.onap.portalapp.portal.service.EPLeftMenuService;
65 import org.onap.portalapp.portal.transport.EPAppsManualPreference;
66 import org.onap.portalapp.portal.transport.EPAppsSortPreference;
67 import org.onap.portalapp.portal.transport.EPDeleteAppsManualSortPref;
68 import org.onap.portalapp.portal.transport.EPWidgetsSortPreference;
69 import org.onap.portalapp.portal.transport.FieldsValidator;
70 import org.onap.portalapp.portal.transport.LocalRole;
71 import org.onap.portalapp.portal.transport.OnboardingApp;
72 import org.onap.portalapp.portal.utils.EcompPortalUtils;
73 import org.onap.portalapp.portal.utils.PortalConstants;
74 import org.onap.portalapp.util.EPUserUtils;
75 import org.onap.portalapp.validation.DataValidator;
76 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
77 import org.onap.portalsdk.core.util.SystemProperties;
78 import org.onap.portalsdk.core.web.support.AppUtils;
79 import org.springframework.beans.factory.annotation.Autowired;
80 import org.springframework.context.annotation.EnableAspectJAutoProxy;
81 import org.springframework.http.HttpEntity;
82 import org.springframework.http.HttpHeaders;
83 import org.springframework.http.HttpStatus;
84 import org.springframework.http.MediaType;
85 import org.springframework.http.ResponseEntity;
86 import org.springframework.web.bind.annotation.PathVariable;
87 import org.springframework.web.bind.annotation.RequestBody;
88 import org.springframework.web.bind.annotation.RequestMapping;
89 import org.springframework.web.bind.annotation.RequestMethod;
90 import org.springframework.web.bind.annotation.RestController;
91 import org.springframework.web.client.HttpClientErrorException;
94 @EnableAspectJAutoProxy
98 public class AppsController extends EPRestrictedBaseController {
99 private static final String GET_RESULT = "GET result =";
100 private static final String PUT_RESULT = "PUT result =";
101 private static final String PORTAL_API_ONBOARDING_APPS = "/portalApi/onboardingApps";
102 private static final String PORTAL_API_USER_APPS_ORDER_BY_SORT_PREF = "/portalApi/userAppsOrderBySortPref";
104 private final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AppsController.class);
105 private final DataValidator dataValidator = new DataValidator();
108 private AdminRolesService adminRolesService;
110 private EPAppService appService;
112 private EPLeftMenuService leftMenuService;
115 * RESTful service method to fetch all Applications available to current
121 * HttpServletResponse
122 * @return List<EcompApp>
124 @RequestMapping(value = { "/portalApi/userApps" }, method = RequestMethod.GET, produces = "application/json")
125 public List<EcompApp> getUserApps(HttpServletRequest request, HttpServletResponse response) {
126 EPUser user = EPUserUtils.getUserSession(request);
127 List<EcompApp> ecompApps = null;
131 EcompPortalUtils.setBadPermissions(user, response, "getUserApps");
133 ecompApps = appService.transformAppsToEcompApps(appService.getUserApps(user));
134 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userApps", GET_RESULT, ecompApps);
136 } catch (Exception e) {
137 logger.error(EELFLoggerDelegate.errorLogger, "getUserApps failed", e);
144 * RESTful service method to fetch all applications accessible to the
145 * current user, with personalizations.
150 * HttpServletResponse
151 * @return List<EcompApp>
152 * @throws IOException
155 @RequestMapping(value = { "/portalApi/persUserApps" }, method = RequestMethod.GET, produces = "application/json")
156 public List<EcompApp> getPersUserApps(HttpServletRequest request, HttpServletResponse response) throws IOException {
157 EPUser user = EPUserUtils.getUserSession(request);
158 List<EcompApp> ecompApps = null;
161 EcompPortalUtils.setBadPermissions(user, response, "getPersUserApps");
163 List<EPApp> apps = null;
164 if (adminRolesService.isSuperAdmin(user))
165 apps = appService.getPersAdminApps(user);
167 apps = appService.getPersUserApps(user);
168 ecompApps = appService.transformAppsToEcompApps(apps);
169 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userPersApps", GET_RESULT, ecompApps);
171 } catch (Exception e) {
172 logger.error(EELFLoggerDelegate.errorLogger, "getPersUserApps failed", e);
173 response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.toString());
179 * RESTful service method to fetch applications for which the current user
180 * is an Administrator
185 * HttpServletResponse
186 * @return List<AppIdAndNameTransportModel>
188 @RequestMapping(value = { "/portalApi/adminApps" }, method = RequestMethod.GET, produces = "application/json")
189 public List<AppIdAndNameTransportModel> getAdminApps(HttpServletRequest request, HttpServletResponse response) {
190 EPUser user = EPUserUtils.getUserSession(request);
191 List<AppIdAndNameTransportModel> adminApps = null;
194 if (!adminRolesService.isAccountAdmin(user) && !adminRolesService.isRoleAdmin(user) ) {
195 EcompPortalUtils.setBadPermissions(user, response, "getAdminApps");
197 adminApps = appService.getAdminApps(user);
198 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/adminApps", GET_RESULT, adminApps);
200 } catch (Exception e) {
201 logger.error(EELFLoggerDelegate.errorLogger, "getAdminApps failed", e);
208 * RESTful service method to fetch Applications for user who is super admin
214 * HttpServletResponse
215 * @return List<AppIdAndNameTransportModel>
217 @RequestMapping(value = {
218 "/portalApi/appsForSuperAdminAndAccountAdmin" }, method = RequestMethod.GET, produces = "application/json")
219 public List<AppIdAndNameTransportModel> getAppsForSuperAdminAndAccountAdmin(HttpServletRequest request,
220 HttpServletResponse response) {
221 EPUser user = EPUserUtils.getUserSession(request);
222 List<AppIdAndNameTransportModel> adminApps = null;
225 if (!adminRolesService.isSuperAdmin(user) && !adminRolesService.isAccountAdmin(user) && !adminRolesService.isRoleAdmin(user) ) {
226 EcompPortalUtils.setBadPermissions(user, response, "getAdminApps");
228 adminApps = appService.getAppsForSuperAdminAndAccountAdmin(user);
229 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/appsForSuperAdminAndAccountAdmin",
230 GET_RESULT, adminApps);
232 } catch (Exception e) {
233 logger.error(EELFLoggerDelegate.errorLogger, "getAppsForSuperAdminAndAccountAdmin failed", e);
240 * RESTful service method to fetch left menu items from the user'PORTAL_API_USER_APPS_ORDER_BY_SORT_PREF session.
245 * HttpServletResponse
246 * @return JSON with left menu
248 @SuppressWarnings({ "rawtypes", "unchecked" })
249 @RequestMapping(value = { "/portalApi/leftmenuItems" }, method = RequestMethod.GET, produces = "application/json;charset=UTF-8")
250 public String getLeftMenuItems(HttpServletRequest request, HttpServletResponse response) {
251 String menuList = null;
252 Set menuSet = (Set) AppUtils.getSession(request)
253 .getAttribute(SystemProperties.getProperty(SystemProperties.APPLICATION_MENU_ATTRIBUTE_NAME));
255 Set roleFunctionSet = (Set) AppUtils.getSession(request)
256 .getAttribute(SystemProperties.getProperty(SystemProperties.ROLE_FUNCTIONS_ATTRIBUTE_NAME));
258 EPUser user = EPUserUtils.getUserSession(request);
261 menuList = leftMenuService.getLeftMenuItems(user, menuSet, roleFunctionSet);
262 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/leftmenuItems", GET_RESULT, menuList);
263 } catch (Exception e) {
264 logger.error(EELFLoggerDelegate.errorLogger, "getLeftMenuItems failed", e);
269 @RequestMapping(value = {
270 PORTAL_API_USER_APPS_ORDER_BY_SORT_PREF }, method = RequestMethod.GET, produces = "application/json")
271 public List<EcompApp> getUserAppsOrderBySortPref(HttpServletRequest request, HttpServletResponse response) {
272 EPUser user = EPUserUtils.getUserSession(request);
273 List<EcompApp> ecompApps = null;
276 EcompPortalUtils.setBadPermissions(user, response, "getUserAppsOrderBySortPref");
278 String usrSortPref = request.getParameter("mparams");
279 if (usrSortPref.isEmpty()) {
282 switch (usrSortPref) {
284 ecompApps = appService.transformAppsToEcompApps(appService.getAppsOrderByName(user));
285 EcompPortalUtils.logAndSerializeObject(logger, PORTAL_API_USER_APPS_ORDER_BY_SORT_PREF, GET_RESULT,
289 ecompApps = appService.transformAppsToEcompApps(appService.getAppsOrderByLastUsed(user));
290 EcompPortalUtils.logAndSerializeObject(logger, PORTAL_API_USER_APPS_ORDER_BY_SORT_PREF, GET_RESULT,
294 ecompApps = appService.transformAppsToEcompApps(appService.getAppsOrderByMostUsed(user));
295 EcompPortalUtils.logAndSerializeObject(logger, PORTAL_API_USER_APPS_ORDER_BY_SORT_PREF, GET_RESULT,
299 ecompApps = appService.transformAppsToEcompApps(appService.getAppsOrderByManual(user));
300 EcompPortalUtils.logAndSerializeObject(logger, PORTAL_API_USER_APPS_ORDER_BY_SORT_PREF, GET_RESULT,
304 logger.error(EELFLoggerDelegate.errorLogger,
305 "getUserAppsOrderBySortPref failed: no match for " + usrSortPref);
308 } catch (Exception e) {
309 logger.error(EELFLoggerDelegate.errorLogger, "getUserAppsOrderBySortPref failed", e);
315 * Sets the user apps manual sort preference
318 * HTTP servlet request
320 * HTTP servlet response
321 * @param epAppsManualPref
323 * @return FieldsValidator
325 @RequestMapping(value = {
326 "/portalApi/saveUserAppsSortingManual" }, method = RequestMethod.PUT, produces = "application/json")
327 public FieldsValidator putUserAppsSortingManual(HttpServletRequest request,
328 @RequestBody List<EPAppsManualPreference> epAppsManualPref, HttpServletResponse response) {
329 FieldsValidator fieldsValidator = null;
331 if (isNotNullAndNotValid(epAppsManualPref)){
332 fieldsValidator = new FieldsValidator();
333 fieldsValidator.setHttpStatusCode((long) HttpServletResponse.SC_NOT_ACCEPTABLE);
334 return fieldsValidator;
338 EPUser user = EPUserUtils.getUserSession(request);
339 fieldsValidator = appService.saveAppsSortManual(epAppsManualPref, user);
340 response.setStatus(fieldsValidator.httpStatusCode.intValue());
341 } catch (Exception e) {
342 logger.error(EELFLoggerDelegate.errorLogger, "putUserAppsSortingManual failed", e);
344 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/saveUserAppsSortingManual", PUT_RESULT,
345 response.getStatus());
346 return fieldsValidator;
349 @RequestMapping(value = {
350 "/portalApi/saveUserWidgetsSortManual" }, method = RequestMethod.PUT, produces = "application/json")
351 public FieldsValidator putUserWidgetsSortManual(HttpServletRequest request,
352 @RequestBody List<EPWidgetsSortPreference> saveManualWidgetSData, HttpServletResponse response) {
353 FieldsValidator fieldsValidator = null;
355 if (isNotNullAndNotValid(saveManualWidgetSData)){
356 fieldsValidator = new FieldsValidator();
357 fieldsValidator.setHttpStatusCode((long)HttpServletResponse.SC_NOT_ACCEPTABLE);
358 return fieldsValidator;
362 EPUser user = EPUserUtils.getUserSession(request);
363 fieldsValidator = appService.saveWidgetsSortManual(saveManualWidgetSData, user);
364 response.setStatus(fieldsValidator.httpStatusCode.intValue());
365 } catch (Exception e) {
366 logger.error(EELFLoggerDelegate.errorLogger, "putUserWidgetsSortManual failed", e);
368 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/putUserWidgetsSortManual", PUT_RESULT,
369 response.getStatus());
370 return fieldsValidator;
373 @RequestMapping(value = {
374 "/portalApi/updateWidgetsSortPref" }, method = RequestMethod.PUT, produces = "application/json")
375 public FieldsValidator putUserWidgetsSortPref(HttpServletRequest request,
376 @RequestBody List<EPWidgetsSortPreference> delManualWidgetData, HttpServletResponse response) {
377 FieldsValidator fieldsValidator = null;
379 if (isNotNullAndNotValid(delManualWidgetData)){
380 fieldsValidator = new FieldsValidator();
381 fieldsValidator.setHttpStatusCode((long)HttpServletResponse.SC_NOT_ACCEPTABLE);
382 return fieldsValidator;
386 EPUser user = EPUserUtils.getUserSession(request);
387 fieldsValidator = appService.deleteUserWidgetSortPref(delManualWidgetData, user);
388 response.setStatus(fieldsValidator.httpStatusCode.intValue());
389 } catch (Exception e) {
390 logger.error(EELFLoggerDelegate.errorLogger, "putUserWidgetsSortPref failed", e);
393 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/putUserWidgetsSortPref", PUT_RESULT,
394 response.getStatus());
395 return fieldsValidator;
399 * Deletes the user app manual sort preference record
402 * HTTP servlet request
404 * HTTP servlet response
405 * @param delManualAppData
407 * @return FieldsValidator
409 @RequestMapping(value = {
410 "/portalApi/UpdateUserAppsSortManual" }, method = RequestMethod.PUT, produces = "application/json")
411 public FieldsValidator deleteUserAppSortManual(HttpServletRequest request,
412 @RequestBody EPDeleteAppsManualSortPref delManualAppData, HttpServletResponse response) {
413 FieldsValidator fieldsValidator = null;
416 EPUser user = EPUserUtils.getUserSession(request);
417 fieldsValidator = appService.deleteUserAppSortManual(delManualAppData, user);
418 response.setStatus(fieldsValidator.httpStatusCode.intValue());
419 } catch (Exception e) {
420 logger.error(EELFLoggerDelegate.errorLogger, "deleteUserAppSortManual failed", e);
423 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/deleteUserAppSortManual", PUT_RESULT,
424 response.getStatus());
425 return fieldsValidator;
428 @RequestMapping(value = {
429 "/portalApi/saveUserAppsSortingPreference" }, method = RequestMethod.PUT, produces = "application/json")
430 public FieldsValidator putUserAppsSortingPreference(HttpServletRequest request,
431 @RequestBody EPAppsSortPreference userAppsValue, HttpServletResponse response) {
432 FieldsValidator fieldsValidator = null;
434 EPUser user = EPUserUtils.getUserSession(request);
435 fieldsValidator = appService.saveAppsSortPreference(userAppsValue, user);
436 response.setStatus(fieldsValidator.httpStatusCode.intValue());
437 } catch (Exception e) {
438 logger.error(EELFLoggerDelegate.errorLogger, "putUserAppsSortingPreference failed", e);
442 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/putUserAppsSortingPreference", PUT_RESULT,
443 response.getStatus());
444 return fieldsValidator;
447 @RequestMapping(value = {
448 "/portalApi/userAppsSortTypePreference" }, method = RequestMethod.GET, produces = "application/String")
449 public String getUserAppsSortTypePreference(HttpServletRequest request, HttpServletResponse response) {
450 EPUser user = EPUserUtils.getUserSession(request);
451 String userSortPreference = null;
455 EcompPortalUtils.setBadPermissions(user, response, "userAppsSortTypePreference");
457 userSortPreference = appService.getUserAppsSortTypePreference(user);
458 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userAppsSortTypePreference", GET_RESULT,
461 } catch (Exception e) {
462 logger.error(EELFLoggerDelegate.errorLogger, "getUserAppsSortTypePreference failed", e);
465 return userSortPreference;
469 * RESTful service method to fetch Application Administrators to Super
470 * Administrator user. Attention: Users which have Super Administrator roles
471 * only are not included!
474 * HTTP servlet request
476 * HTTP servlet response
477 * @return List<AdminUserApplications>
479 @RequestMapping(value = { "/portalApi/accountAdmins" }, method = RequestMethod.GET, produces = "application/json")
480 public List<AdminUserApplications> getAppsAdministrators(HttpServletRequest request, HttpServletResponse response) {
481 EPUser user = EPUserUtils.getUserSession(request);
482 List<AdminUserApplications> admins = null;
484 if (!adminRolesService.isSuperAdmin(user)) {
485 EcompPortalUtils.setBadPermissions(user, response, "getAppsAdministrators");
487 admins = appService.getAppsAdmins();
488 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/accountAdmins", GET_RESULT, admins);
490 } catch (Exception e) {
491 logger.error(EELFLoggerDelegate.errorLogger, "getAppsAdministrators failed", e);
497 @RequestMapping(value = { "/portalApi/availableApps" }, method = RequestMethod.GET, produces = "application/json")
498 public List<AppsResponse> getApps(HttpServletRequest request, HttpServletResponse response) {
499 EPUser user = EPUserUtils.getUserSession(request);
500 List<AppsResponse> apps = null;
502 if (!adminRolesService.isSuperAdmin(user)) {
503 EcompPortalUtils.setBadPermissions(user, response, "getApps");
505 apps = appService.getAllApplications(false);
506 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/availableApps", GET_RESULT, apps);
508 } catch (Exception e) {
509 logger.error(EELFLoggerDelegate.errorLogger, "getApps failed", e);
516 * Gets all apps, both active and inactive; i.e., all on-boarded apps,
517 * regardless of enabled status.
520 * HTTP servlet request
522 * HTTP servlet response
523 * @return List of applications
525 @RequestMapping(value = {
526 "/portalApi/allAvailableApps" }, method = RequestMethod.GET, produces = "application/json")
527 public List<AppsResponse> getAllApps(HttpServletRequest request, HttpServletResponse response) {
528 EPUser user = EPUserUtils.getUserSession(request);
529 List<AppsResponse> apps = null;
531 if (!adminRolesService.isSuperAdmin(user)) {
532 EcompPortalUtils.setBadPermissions(user, response, "getApps");
534 apps = appService.getAllApps(true);
535 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/availableApps", GET_RESULT, apps);
537 } catch (Exception e) {
538 logger.error(EELFLoggerDelegate.errorLogger, "getAllApps failed", e);
547 * HTTP servlet request
549 * HTTP servlet response
550 * @return List of applications
552 @RequestMapping(value = { "/portalApi/appsFullList" }, method = RequestMethod.GET, produces = "application/json")
553 public List<EcompApp> getAppsFullList(HttpServletRequest request, HttpServletResponse response) {
554 EPUser user = EPUserUtils.getUserSession(request);
555 List<EcompApp> ecompApps = null;
557 EcompPortalUtils.setBadPermissions(user, response, "getAppsFullList");
559 ecompApps = appService.getEcompAppAppsFullList();
560 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/appsFullList", GET_RESULT, ecompApps);
568 * HTTP servlet request
570 * HTTP servlet response
573 @RequestMapping(value = { "/portalApi/userProfile" }, method = RequestMethod.GET, produces = "application/json")
574 public UserRoles getUserProfile(HttpServletRequest request, HttpServletResponse response) {
575 EPUser user = EPUserUtils.getUserSession(request);
576 UserRoles userAndRoles = null;
579 EcompPortalUtils.setBadPermissions(user, response, "getUserProfile");
581 userAndRoles = appService.getUserProfileNormalized(user);
583 } catch (Exception e) {
584 logger.error(EELFLoggerDelegate.errorLogger, "getUserProfile failed", e);
587 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userProfile", "getUserProfile result =",
595 * HTTP servlet request
598 * @return List<LocalRole>
600 @RequestMapping(value = { "/portalApi/appRoles/{appId}" }, method = {
601 RequestMethod.GET }, produces = "application/json")
602 public List<LocalRole> getAppRoles(HttpServletRequest request, @PathVariable("appId") Long appId,
603 HttpServletResponse response) {
604 List<LocalRole> roleList = null;
605 EPUser user = EPUserUtils.getUserSession(request);
606 EPApp requestedApp = appService.getApp(appId);
607 if (user != null && (adminRolesService.isAccountAdminOfApplication(user, requestedApp)
608 || (adminRolesService.isSuperAdmin(user) && requestedApp.getId() == PortalConstants.PORTAL_APP_ID))) {
610 roleList = appService.getAppRoles(appId);
611 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/appRoles/" + appId, GET_RESULT,
613 } catch (Exception e) {
614 logger.error(EELFLoggerDelegate.errorLogger, "getAppRoles failed", e);
617 EcompPortalUtils.setBadPermissions(user, response, "getAppRoles");
624 * Return single app information with appName as parameter
628 * @return EPApp object
630 @RequestMapping(value = { "/portalApi/singleAppInfo" }, method = {
631 RequestMethod.GET }, produces = "application/json")
632 public EPApp getSingleAppInfo(HttpServletRequest request, HttpServletResponse response) {
634 EPUser user = EPUserUtils.getUserSession(request);
636 String appName = request.getParameter("appParam");
637 app = appService.getAppDetailByAppName(appName);
638 if (user != null && (adminRolesService.isAccountAdminOfApplication(user, app)
639 || (adminRolesService.isSuperAdmin(user) && app.getId().equals(PortalConstants.PORTAL_APP_ID))))
640 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/singleAppInfo" + appName, GET_RESULT, app);
643 EcompPortalUtils.setBadPermissions(user, response, "createAdmin");
646 } catch (Exception e) {
647 logger.error(EELFLoggerDelegate.errorLogger, "getSingleAppInfo failed", e);
654 * Return single app information with appId as parameter
658 * @return EPApp object
660 @RequestMapping(value = { "/portalApi/singleAppInfoById" }, method = {
661 RequestMethod.GET }, produces = "application/json")
662 public EPApp getSingleAppInfoById(HttpServletRequest request, HttpServletResponse response) {
664 EPUser user = EPUserUtils.getUserSession(request);
666 String appId = request.getParameter("appParam");
667 app = appService.getApp(Long.valueOf(appId));
668 if(!EcompPortalUtils.checkIfRemoteCentralAccessAllowed()) {
669 app.setCentralAuth(false);
671 if (user != null && (adminRolesService.isAccountAdminOfApplication(user, app)
672 || (adminRolesService.isSuperAdmin(user) && app.getId().equals(PortalConstants.PORTAL_APP_ID))))
673 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/singleAppInfoById" + appId, GET_RESULT, app);
676 EcompPortalUtils.setBadPermissions(user, response, "createAdmin");
679 } catch (Exception e) {
680 logger.error(EELFLoggerDelegate.errorLogger, "getSingleAppInfo failed", e);
688 * HTTP servlet request
690 * HTTP servlet response
691 * @return List<OnboardingApp>
693 @RequestMapping(value = { PORTAL_API_ONBOARDING_APPS }, method = RequestMethod.GET, produces = "application/json")
694 public List<OnboardingApp> getOnboardingApps(HttpServletRequest request, HttpServletResponse response) {
695 EPUser user = EPUserUtils.getUserSession(request);
696 List<OnboardingApp> onboardingApps = null;
698 if (!adminRolesService.isSuperAdmin(user) && !adminRolesService.isAccountAdmin(user)) {
699 EcompPortalUtils.setBadPermissions(user, response, "getOnboardingApps");
702 if(adminRolesService.isSuperAdmin(user)){
703 onboardingApps = appService.getOnboardingApps();
705 else if(adminRolesService.isAccountAdmin(user))
707 //get all his admin apps
708 onboardingApps = appService.getAdminAppsOfUser(user);
710 EcompPortalUtils.logAndSerializeObject(logger, PORTAL_API_ONBOARDING_APPS, GET_RESULT,
711 "onboardingApps of size " + (onboardingApps != null ? onboardingApps.size() : 0));
713 } catch (Exception e) {
714 logger.error(EELFLoggerDelegate.errorLogger, "getOnboardingApps failed", e);
717 return onboardingApps;
723 * HTTP servlet request
725 * HTTP servlet response
726 * @param modifiedOnboardingApp
728 * @return FieldsValidator
731 @RequestMapping(value = { PORTAL_API_ONBOARDING_APPS }, method = RequestMethod.PUT, produces = "application/json")
732 public FieldsValidator putOnboardingApp(HttpServletRequest request,
733 @RequestBody OnboardingApp modifiedOnboardingApp, HttpServletResponse response) {
734 FieldsValidator fieldsValidator = null;
736 EPApp oldEPApp = appService.getApp(modifiedOnboardingApp.id);
739 user = EPUserUtils.getUserSession(request);
740 if (!adminRolesService.isSuperAdmin(user) && !adminRolesService.isAccountAdminOfAnyActiveorInactiveApplication(user, oldEPApp) ) {
741 EcompPortalUtils.setBadPermissions(user, response, "putOnboardingApp");
743 if((oldEPApp.getCentralAuth() && modifiedOnboardingApp.isCentralAuth && !oldEPApp.getNameSpace().equalsIgnoreCase(modifiedOnboardingApp.nameSpace) && modifiedOnboardingApp.nameSpace!= null ) || (!oldEPApp.getCentralAuth() && modifiedOnboardingApp.isCentralAuth && modifiedOnboardingApp.nameSpace!= null))
745 checkIfNameSpaceIsValid(modifiedOnboardingApp, fieldsValidator, response);
747 modifiedOnboardingApp.normalize();
748 fieldsValidator = appService.modifyOnboardingApp(modifiedOnboardingApp, user);
749 response.setStatus(fieldsValidator.httpStatusCode.intValue());
751 } catch (Exception e) {
752 logger.error(EELFLoggerDelegate.errorLogger, "putOnboardingApps failed", e);
754 if(response.getStatus()==200) {
756 String oldvaluesAsJson = new ObjectMapper().writeValueAsString(oldEPApp);
757 String newvaluesAsJson = new ObjectMapper().writeValueAsString(modifiedOnboardingApp);
758 logger.info(EELFLoggerDelegate.auditLogger, "/portalApi/onboardingApps, old values ={}", oldvaluesAsJson);
759 logger.info(EELFLoggerDelegate.auditLogger, "/portalApi/onboardingApps, loginId={}, new values ={}",
760 user != null ? user.getLoginId() : "", newvaluesAsJson);
761 } catch (JsonProcessingException e) {
762 logger.error(EELFLoggerDelegate.errorLogger, "putOnboardingApps failed", e);
765 EcompPortalUtils.logAndSerializeObject(logger, PORTAL_API_ONBOARDING_APPS, PUT_RESULT,
766 response.getStatus());
767 return fieldsValidator;
775 * HTTP servlet request
777 * HTTP servlet response
778 * @param newOnboardingApp
780 * @return FieldsValidator
782 @RequestMapping(value = { PORTAL_API_ONBOARDING_APPS }, method = RequestMethod.POST, produces = "application/json")
783 public FieldsValidator postOnboardingApp(HttpServletRequest request, @RequestBody OnboardingApp newOnboardingApp,
784 HttpServletResponse response) {
785 FieldsValidator fieldsValidator = null;
787 EPUser user = EPUserUtils.getUserSession(request);
788 if (!adminRolesService.isSuperAdmin(user)) {
789 EcompPortalUtils.setBadPermissions(user, response, "postOnboardingApps");
791 newOnboardingApp.normalize();
792 checkIfNameSpaceIsValid(newOnboardingApp, fieldsValidator, response);
793 fieldsValidator = appService.addOnboardingApp(newOnboardingApp, user);
794 response.setStatus(fieldsValidator.httpStatusCode.intValue());
796 if(response.getStatus()==200) {
798 String newvaluesAsJson = new ObjectMapper().writeValueAsString(newOnboardingApp);
799 logger.info(EELFLoggerDelegate.auditLogger, "/portalApi/onboardingApps, loginId="+user.getLoginId()+", values ="+newvaluesAsJson);
800 } catch (JsonProcessingException e) {
801 logger.error(EELFLoggerDelegate.errorLogger, "postOnboardingApps failed", e);
804 } catch (Exception e) {
805 logger.error(EELFLoggerDelegate.errorLogger, "postOnboardingApp failed", e);
808 EcompPortalUtils.logAndSerializeObject(logger, PORTAL_API_ONBOARDING_APPS, "POST result =",
809 response.getStatus());
810 return fieldsValidator;
813 private FieldsValidator setResponse(HttpStatus statusCode, HttpServletResponse response)
815 FieldsValidator fieldsValidator = new FieldsValidator();
816 if (statusCode == HttpStatus.NOT_FOUND || statusCode == HttpStatus.FORBIDDEN) {
817 fieldsValidator.httpStatusCode = (long) HttpServletResponse.SC_NOT_FOUND;
818 logger.error(EELFLoggerDelegate.errorLogger, "setResponse failed"+ "invalid namespace");
819 }else if (statusCode == HttpStatus.UNAUTHORIZED) {
820 fieldsValidator.httpStatusCode = (long) HttpServletResponse.SC_UNAUTHORIZED;
821 logger.error(EELFLoggerDelegate.errorLogger, "setResponse failed"+ "unauthorized");
823 fieldsValidator.httpStatusCode = (long) HttpServletResponse.SC_BAD_REQUEST;
824 logger.error(EELFLoggerDelegate.errorLogger, "setResponse failed ",statusCode);
827 response.setStatus(fieldsValidator.httpStatusCode.intValue());
828 return fieldsValidator;
832 * REST endpoint to process a request to delete an on-boarded application.
835 * HTTP servlet request
837 * HTTP servlet response
839 * ID of app to delete
840 * @return FieldsValidator
842 @RequestMapping(value = { "/portalApi/onboardingApps/{appId}" }, method = {
843 RequestMethod.DELETE }, produces = "application/json")
844 public FieldsValidator deleteOnboardingApp(HttpServletRequest request, @PathVariable("appId") Long appId,
845 HttpServletResponse response) {
846 FieldsValidator fieldsValidator = null;
848 EPUser user = EPUserUtils.getUserSession(request);
849 if (!adminRolesService.isSuperAdmin(user)) {
850 EcompPortalUtils.setBadPermissions(user, response, "deleteOnboardingApps");
852 fieldsValidator = appService.deleteOnboardingApp(user, appId);
853 response.setStatus(fieldsValidator.httpStatusCode.intValue());
855 if (response.getStatus() == 200) {
856 logger.info(EELFLoggerDelegate.auditLogger,
857 "/portalApi/onboardingApps/" + appId + "deleted by user " + user.getLoginId());
859 } catch (Exception e) {
860 logger.error(EELFLoggerDelegate.errorLogger, "deleteOnboardingApp failed", e);
861 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
864 EcompPortalUtils.logAndSerializeObject(logger, PORTAL_API_ONBOARDING_APPS + appId, "DELETE result =",
865 response.getStatus());
866 return fieldsValidator;
870 * Gets the application thumbnail image; sets status 404 if none exists.
873 * HTTP servlet request
875 * HTTP servlet response
878 * @return Bytes with the app thumbnail image; null if not available.
880 @RequestMapping(value = { "/portalApi/appThumbnail/{appId}" }, method = { RequestMethod.GET })
881 public HttpEntity<byte[]> getAppThumbnail(HttpServletRequest request, @PathVariable("appId") Long appId,
882 HttpServletResponse response) {
883 EPApp app = appService.getApp(appId);
884 if (app == null || app.getImageUrl() == null || app.getThumbnail() == null || app.getThumbnail().length == 0) {
885 logger.debug(EELFLoggerDelegate.debugLogger,
886 "getAppThumbnail: no app and/or no thumbnail for app " + appId);
887 response.setStatus(HttpServletResponse.SC_NOT_FOUND);
890 String url = app.getImageUrl();
891 int indexOfDot = url.lastIndexOf('.');
892 String urlSuffix = indexOfDot > 0 ? url.substring(indexOfDot + 1).toLowerCase() : "UNK";
893 // Default to JPG if no usable suffix.
894 MediaType mediaType = MediaType.IMAGE_JPEG;
895 if ("png".equals(urlSuffix))
896 mediaType = MediaType.IMAGE_PNG;
897 else if ("gif".equals(urlSuffix))
898 mediaType = MediaType.IMAGE_GIF;
899 HttpHeaders header = new HttpHeaders();
900 header.setContentType(mediaType);
901 header.setContentLength(app.getThumbnail().length);
902 return new HttpEntity<>(app.getThumbnail(), header);
905 private void checkIfNameSpaceIsValid(OnboardingApp modifiedOnboardingApp, FieldsValidator fieldsValidator, HttpServletResponse response)
906 throws InvalidApplicationException {
908 ResponseEntity<String> res = appService.checkIfNameSpaceIsValid(modifiedOnboardingApp.nameSpace);
909 } catch (HttpClientErrorException e) {
910 logger.error(EELFLoggerDelegate.errorLogger, "checkIfNameSpaceExists failed", e);
911 EPLogUtil.logExternalAuthAccessAlarm(logger, e.getStatusCode());
912 if (e.getStatusCode() == HttpStatus.NOT_FOUND || e.getStatusCode() == HttpStatus.FORBIDDEN) {
913 fieldsValidator = setResponse(e.getStatusCode(),response);
914 throw new InvalidApplicationException("Invalid NameSpace");
916 fieldsValidator = setResponse(e.getStatusCode(),response);
919 } catch (Exception e) {
924 private boolean isNotNullAndNotValid(Object o){
925 return o!=null && !dataValidator.isValid(o);