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.GetMapping;
90 import org.springframework.web.bind.annotation.PutMapping;
91 import org.springframework.web.bind.annotation.PostMapping;
92 import org.springframework.web.bind.annotation.DeleteMapping;
93 import org.springframework.web.bind.annotation.RequestMethod;
94 import org.springframework.web.bind.annotation.RestController;
95 import org.springframework.web.client.HttpClientErrorException;
98 @EnableAspectJAutoProxy
102 public class AppsController extends EPRestrictedBaseController {
103 private static final String GET_RESULT = "GET result =";
104 private static final String PUT_RESULT = "PUT result =";
105 private static final String PORTAL_API_ONBOARDING_APPS = "/portalApi/onboardingApps";
106 private static final String PORTAL_API_USER_APPS_ORDER_BY_SORT_PREF = "/portalApi/userAppsOrderBySortPref";
108 private final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AppsController.class);
109 private final DataValidator dataValidator = new DataValidator();
112 private AdminRolesService adminRolesService;
114 private EPAppService appService;
116 private EPLeftMenuService leftMenuService;
119 * RESTful service method to fetch all Applications available to current
125 * HttpServletResponse
126 * @return List<EcompApp>
128 @GetMapping(value = { "/portalApi/userApps" }, produces = "application/json")
129 public List<EcompApp> getUserApps(HttpServletRequest request, HttpServletResponse response) {
130 EPUser user = EPUserUtils.getUserSession(request);
131 List<EcompApp> ecompApps = null;
135 EcompPortalUtils.setBadPermissions(user, response, "getUserApps");
137 ecompApps = appService.transformAppsToEcompApps(appService.getUserApps(user));
138 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userApps", GET_RESULT, ecompApps);
140 } catch (Exception e) {
141 logger.error(EELFLoggerDelegate.errorLogger, "getUserApps failed", e);
148 * RESTful service method to fetch all applications accessible to the
149 * current user, with personalizations.
154 * HttpServletResponse
155 * @return List<EcompApp>
156 * @throws IOException
159 @GetMapping(value = { "/portalApi/persUserApps" }, produces = "application/json")
160 public List<EcompApp> getPersUserApps(HttpServletRequest request, HttpServletResponse response) throws IOException {
161 EPUser user = EPUserUtils.getUserSession(request);
162 List<EcompApp> ecompApps = null;
165 EcompPortalUtils.setBadPermissions(user, response, "getPersUserApps");
167 List<EPApp> apps = null;
168 if (adminRolesService.isSuperAdmin(user))
169 apps = appService.getPersAdminApps(user);
171 apps = appService.getPersUserApps(user);
172 ecompApps = appService.transformAppsToEcompApps(apps);
173 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userPersApps", GET_RESULT, ecompApps);
175 } catch (Exception e) {
176 logger.error(EELFLoggerDelegate.errorLogger, "getPersUserApps failed", e);
177 response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.toString());
183 * RESTful service method to fetch applications for which the current user
184 * is an Administrator
189 * HttpServletResponse
190 * @return List<AppIdAndNameTransportModel>
192 @GetMapping(value = { "/portalApi/adminApps" }, produces = "application/json")
193 public List<AppIdAndNameTransportModel> getAdminApps(HttpServletRequest request, HttpServletResponse response) {
194 EPUser user = EPUserUtils.getUserSession(request);
195 List<AppIdAndNameTransportModel> adminApps = null;
198 if (!adminRolesService.isAccountAdmin(user) && !adminRolesService.isRoleAdmin(user) ) {
199 EcompPortalUtils.setBadPermissions(user, response, "getAdminApps");
201 adminApps = appService.getAdminApps(user);
202 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/adminApps", GET_RESULT, adminApps);
204 } catch (Exception e) {
205 logger.error(EELFLoggerDelegate.errorLogger, "getAdminApps failed", e);
212 * RESTful service method to fetch Applications for user who is super admin
218 * HttpServletResponse
219 * @return List<AppIdAndNameTransportModel>
221 @GetMapping(value = {
222 "/portalApi/appsForSuperAdminAndAccountAdmin" }, produces = "application/json")
223 public List<AppIdAndNameTransportModel> getAppsForSuperAdminAndAccountAdmin(HttpServletRequest request,
224 HttpServletResponse response) {
225 EPUser user = EPUserUtils.getUserSession(request);
226 List<AppIdAndNameTransportModel> adminApps = null;
229 if (!adminRolesService.isSuperAdmin(user) && !adminRolesService.isAccountAdmin(user) && !adminRolesService.isRoleAdmin(user) ) {
230 EcompPortalUtils.setBadPermissions(user, response, "getAdminApps");
232 adminApps = appService.getAppsForSuperAdminAndAccountAdmin(user);
233 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/appsForSuperAdminAndAccountAdmin",
234 GET_RESULT, adminApps);
236 } catch (Exception e) {
237 logger.error(EELFLoggerDelegate.errorLogger, "getAppsForSuperAdminAndAccountAdmin failed", e);
244 * RESTful service method to fetch left menu items from the user'PORTAL_API_USER_APPS_ORDER_BY_SORT_PREF session.
249 * HttpServletResponse
250 * @return JSON with left menu
252 @SuppressWarnings({ "rawtypes", "unchecked" })
253 @GetMapping(value = { "/portalApi/leftmenuItems" }, produces = "application/json;charset=UTF-8")
254 public String getLeftMenuItems(HttpServletRequest request, HttpServletResponse response) {
255 String menuList = null;
256 Set menuSet = (Set) AppUtils.getSession(request)
257 .getAttribute(SystemProperties.getProperty(SystemProperties.APPLICATION_MENU_ATTRIBUTE_NAME));
259 Set roleFunctionSet = (Set) AppUtils.getSession(request)
260 .getAttribute(SystemProperties.getProperty(SystemProperties.ROLE_FUNCTIONS_ATTRIBUTE_NAME));
262 EPUser user = EPUserUtils.getUserSession(request);
265 menuList = leftMenuService.getLeftMenuItems(user, menuSet, roleFunctionSet);
266 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/leftmenuItems", GET_RESULT, menuList);
267 } catch (Exception e) {
268 logger.error(EELFLoggerDelegate.errorLogger, "getLeftMenuItems failed", e);
273 @GetMapping(value = {
274 PORTAL_API_USER_APPS_ORDER_BY_SORT_PREF }, produces = "application/json")
275 public List<EcompApp> getUserAppsOrderBySortPref(HttpServletRequest request, HttpServletResponse response) {
276 EPUser user = EPUserUtils.getUserSession(request);
277 List<EcompApp> ecompApps = null;
280 EcompPortalUtils.setBadPermissions(user, response, "getUserAppsOrderBySortPref");
282 String usrSortPref = request.getParameter("mparams");
283 if (usrSortPref.isEmpty()) {
286 switch (usrSortPref) {
288 ecompApps = appService.transformAppsToEcompApps(appService.getAppsOrderByName(user));
289 EcompPortalUtils.logAndSerializeObject(logger, PORTAL_API_USER_APPS_ORDER_BY_SORT_PREF, GET_RESULT,
293 ecompApps = appService.transformAppsToEcompApps(appService.getAppsOrderByLastUsed(user));
294 EcompPortalUtils.logAndSerializeObject(logger, PORTAL_API_USER_APPS_ORDER_BY_SORT_PREF, GET_RESULT,
298 ecompApps = appService.transformAppsToEcompApps(appService.getAppsOrderByMostUsed(user));
299 EcompPortalUtils.logAndSerializeObject(logger, PORTAL_API_USER_APPS_ORDER_BY_SORT_PREF, GET_RESULT,
303 ecompApps = appService.transformAppsToEcompApps(appService.getAppsOrderByManual(user));
304 EcompPortalUtils.logAndSerializeObject(logger, PORTAL_API_USER_APPS_ORDER_BY_SORT_PREF, GET_RESULT,
308 logger.error(EELFLoggerDelegate.errorLogger,
309 "getUserAppsOrderBySortPref failed: no match for " + usrSortPref);
312 } catch (Exception e) {
313 logger.error(EELFLoggerDelegate.errorLogger, "getUserAppsOrderBySortPref failed", e);
319 * Sets the user apps manual sort preference
322 * HTTP servlet request
324 * HTTP servlet response
325 * @param epAppsManualPref
327 * @return FieldsValidator
329 @PutMapping(value = {
330 "/portalApi/saveUserAppsSortingManual" }, produces = "application/json")
331 public FieldsValidator putUserAppsSortingManual(HttpServletRequest request,
332 @RequestBody List<EPAppsManualPreference> epAppsManualPref, HttpServletResponse response) {
333 FieldsValidator fieldsValidator = null;
335 if (isNotNullAndNotValid(epAppsManualPref)){
336 fieldsValidator = new FieldsValidator();
337 fieldsValidator.setHttpStatusCode((long) HttpServletResponse.SC_NOT_ACCEPTABLE);
338 return fieldsValidator;
342 EPUser user = EPUserUtils.getUserSession(request);
343 fieldsValidator = appService.saveAppsSortManual(epAppsManualPref, user);
344 response.setStatus(fieldsValidator.httpStatusCode.intValue());
345 } catch (Exception e) {
346 logger.error(EELFLoggerDelegate.errorLogger, "putUserAppsSortingManual failed", e);
348 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/saveUserAppsSortingManual", PUT_RESULT,
349 response.getStatus());
350 return fieldsValidator;
353 @PutMapping(value = {
354 "/portalApi/saveUserWidgetsSortManual" }, produces = "application/json")
355 public FieldsValidator putUserWidgetsSortManual(HttpServletRequest request,
356 @RequestBody List<EPWidgetsSortPreference> saveManualWidgetSData, HttpServletResponse response) {
357 FieldsValidator fieldsValidator = null;
359 if (isNotNullAndNotValid(saveManualWidgetSData)){
360 fieldsValidator = new FieldsValidator();
361 fieldsValidator.setHttpStatusCode((long)HttpServletResponse.SC_NOT_ACCEPTABLE);
362 return fieldsValidator;
366 EPUser user = EPUserUtils.getUserSession(request);
367 fieldsValidator = appService.saveWidgetsSortManual(saveManualWidgetSData, user);
368 response.setStatus(fieldsValidator.httpStatusCode.intValue());
369 } catch (Exception e) {
370 logger.error(EELFLoggerDelegate.errorLogger, "putUserWidgetsSortManual failed", e);
372 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/putUserWidgetsSortManual", PUT_RESULT,
373 response.getStatus());
374 return fieldsValidator;
377 @PutMapping(value = {
378 "/portalApi/updateWidgetsSortPref" }, produces = "application/json")
379 public FieldsValidator putUserWidgetsSortPref(HttpServletRequest request,
380 @RequestBody List<EPWidgetsSortPreference> delManualWidgetData, HttpServletResponse response) {
381 FieldsValidator fieldsValidator = null;
383 if (isNotNullAndNotValid(delManualWidgetData)){
384 fieldsValidator = new FieldsValidator();
385 fieldsValidator.setHttpStatusCode((long)HttpServletResponse.SC_NOT_ACCEPTABLE);
386 return fieldsValidator;
390 EPUser user = EPUserUtils.getUserSession(request);
391 fieldsValidator = appService.deleteUserWidgetSortPref(delManualWidgetData, user);
392 response.setStatus(fieldsValidator.httpStatusCode.intValue());
393 } catch (Exception e) {
394 logger.error(EELFLoggerDelegate.errorLogger, "putUserWidgetsSortPref failed", e);
397 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/putUserWidgetsSortPref", PUT_RESULT,
398 response.getStatus());
399 return fieldsValidator;
403 * Deletes the user app manual sort preference record
406 * HTTP servlet request
408 * HTTP servlet response
409 * @param delManualAppData
411 * @return FieldsValidator
413 @PutMapping(value = {
414 "/portalApi/UpdateUserAppsSortManual" }, produces = "application/json")
415 public FieldsValidator deleteUserAppSortManual(HttpServletRequest request,
416 @RequestBody EPDeleteAppsManualSortPref delManualAppData, HttpServletResponse response) {
417 FieldsValidator fieldsValidator = null;
420 EPUser user = EPUserUtils.getUserSession(request);
421 fieldsValidator = appService.deleteUserAppSortManual(delManualAppData, user);
422 response.setStatus(fieldsValidator.httpStatusCode.intValue());
423 } catch (Exception e) {
424 logger.error(EELFLoggerDelegate.errorLogger, "deleteUserAppSortManual failed", e);
427 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/deleteUserAppSortManual", PUT_RESULT,
428 response.getStatus());
429 return fieldsValidator;
432 @PutMapping(value = {
433 "/portalApi/saveUserAppsSortingPreference" }, produces = "application/json")
434 public FieldsValidator putUserAppsSortingPreference(HttpServletRequest request,
435 @RequestBody EPAppsSortPreference userAppsValue, HttpServletResponse response) {
436 FieldsValidator fieldsValidator = null;
438 EPUser user = EPUserUtils.getUserSession(request);
439 fieldsValidator = appService.saveAppsSortPreference(userAppsValue, user);
440 response.setStatus(fieldsValidator.httpStatusCode.intValue());
441 } catch (Exception e) {
442 logger.error(EELFLoggerDelegate.errorLogger, "putUserAppsSortingPreference failed", e);
446 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/putUserAppsSortingPreference", PUT_RESULT,
447 response.getStatus());
448 return fieldsValidator;
451 @GetMapping(value = {
452 "/portalApi/userAppsSortTypePreference" }, produces = "application/String")
453 public String getUserAppsSortTypePreference(HttpServletRequest request, HttpServletResponse response) {
454 EPUser user = EPUserUtils.getUserSession(request);
455 String userSortPreference = null;
459 EcompPortalUtils.setBadPermissions(user, response, "userAppsSortTypePreference");
461 userSortPreference = appService.getUserAppsSortTypePreference(user);
462 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userAppsSortTypePreference", GET_RESULT,
465 } catch (Exception e) {
466 logger.error(EELFLoggerDelegate.errorLogger, "getUserAppsSortTypePreference failed", e);
469 return userSortPreference;
473 * RESTful service method to fetch Application Administrators to Super
474 * Administrator user. Attention: Users which have Super Administrator roles
475 * only are not included!
478 * HTTP servlet request
480 * HTTP servlet response
481 * @return List<AdminUserApplications>
483 @GetMapping(value = { "/portalApi/accountAdmins" }, produces = "application/json")
484 public List<AdminUserApplications> getAppsAdministrators(HttpServletRequest request, HttpServletResponse response) {
485 EPUser user = EPUserUtils.getUserSession(request);
486 List<AdminUserApplications> admins = null;
488 if (!adminRolesService.isSuperAdmin(user)) {
489 EcompPortalUtils.setBadPermissions(user, response, "getAppsAdministrators");
491 admins = appService.getAppsAdmins();
492 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/accountAdmins", GET_RESULT, admins);
494 } catch (Exception e) {
495 logger.error(EELFLoggerDelegate.errorLogger, "getAppsAdministrators failed", e);
501 @GetMapping(value = { "/portalApi/availableApps" }, produces = "application/json")
502 public List<AppsResponse> getApps(HttpServletRequest request, HttpServletResponse response) {
503 EPUser user = EPUserUtils.getUserSession(request);
504 List<AppsResponse> apps = null;
506 if (!adminRolesService.isSuperAdmin(user)) {
507 EcompPortalUtils.setBadPermissions(user, response, "getApps");
509 apps = appService.getAllApplications(false);
510 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/availableApps", GET_RESULT, apps);
512 } catch (Exception e) {
513 logger.error(EELFLoggerDelegate.errorLogger, "getApps failed", e);
520 * Gets all apps, both active and inactive; i.e., all on-boarded apps,
521 * regardless of enabled status.
524 * HTTP servlet request
526 * HTTP servlet response
527 * @return List of applications
529 @GetMapping(value = {
530 "/portalApi/allAvailableApps" }, produces = "application/json")
531 public List<AppsResponse> getAllApps(HttpServletRequest request, HttpServletResponse response) {
532 EPUser user = EPUserUtils.getUserSession(request);
533 List<AppsResponse> apps = null;
535 if (!adminRolesService.isSuperAdmin(user)) {
536 EcompPortalUtils.setBadPermissions(user, response, "getApps");
538 apps = appService.getAllApps(true);
539 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/availableApps", GET_RESULT, apps);
541 } catch (Exception e) {
542 logger.error(EELFLoggerDelegate.errorLogger, "getAllApps failed", e);
551 * HTTP servlet request
553 * HTTP servlet response
554 * @return List of applications
556 @GetMapping(value = { "/portalApi/appsFullList" }, produces = "application/json")
557 public List<EcompApp> getAppsFullList(HttpServletRequest request, HttpServletResponse response) {
558 EPUser user = EPUserUtils.getUserSession(request);
559 List<EcompApp> ecompApps = null;
561 EcompPortalUtils.setBadPermissions(user, response, "getAppsFullList");
563 ecompApps = appService.getEcompAppAppsFullList();
564 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/appsFullList", GET_RESULT, ecompApps);
572 * HTTP servlet request
574 * HTTP servlet response
577 @GetMapping(value = { "/portalApi/userProfile" }, produces = "application/json")
578 public UserRoles getUserProfile(HttpServletRequest request, HttpServletResponse response) {
579 EPUser user = EPUserUtils.getUserSession(request);
580 UserRoles userAndRoles = null;
583 EcompPortalUtils.setBadPermissions(user, response, "getUserProfile");
585 userAndRoles = appService.getUserProfileNormalized(user);
587 } catch (Exception e) {
588 logger.error(EELFLoggerDelegate.errorLogger, "getUserProfile failed", e);
591 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/userProfile", "getUserProfile result =",
599 * HTTP servlet request
602 * @return List<LocalRole>
604 @GetMapping(value = { "/portalApi/appRoles/{appId}" }, produces = "application/json")
605 public List<LocalRole> getAppRoles(HttpServletRequest request, @PathVariable("appId") Long appId,
606 HttpServletResponse response) {
607 List<LocalRole> roleList = null;
608 EPUser user = EPUserUtils.getUserSession(request);
609 EPApp requestedApp = appService.getApp(appId);
610 if (user != null && (adminRolesService.isAccountAdminOfApplication(user, requestedApp)
611 || (adminRolesService.isSuperAdmin(user) && requestedApp.getId() == PortalConstants.PORTAL_APP_ID))) {
613 roleList = appService.getAppRoles(appId);
614 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/appRoles/" + appId, GET_RESULT,
616 } catch (Exception e) {
617 logger.error(EELFLoggerDelegate.errorLogger, "getAppRoles failed", e);
620 EcompPortalUtils.setBadPermissions(user, response, "getAppRoles");
627 * Return single app information with appName as parameter
631 * @return EPApp object
633 @GetMapping(value = { "/portalApi/singleAppInfo" }, produces = "application/json")
634 public EPApp getSingleAppInfo(HttpServletRequest request, HttpServletResponse response) {
636 EPUser user = EPUserUtils.getUserSession(request);
638 String appName = request.getParameter("appParam");
639 app = appService.getAppDetailByAppName(appName);
640 if (user != null && (adminRolesService.isAccountAdminOfApplication(user, app)
641 || (adminRolesService.isSuperAdmin(user) && app.getId().equals(PortalConstants.PORTAL_APP_ID))))
642 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/singleAppInfo" + appName, GET_RESULT, app);
645 EcompPortalUtils.setBadPermissions(user, response, "createAdmin");
648 } catch (Exception e) {
649 logger.error(EELFLoggerDelegate.errorLogger, "getSingleAppInfo failed", e);
656 * Return single app information with appId as parameter
660 * @return EPApp object
662 @GetMapping(value = { "/portalApi/singleAppInfoById" }, produces = "application/json")
663 public EPApp getSingleAppInfoById(HttpServletRequest request, HttpServletResponse response) {
665 EPUser user = EPUserUtils.getUserSession(request);
667 String appId = request.getParameter("appParam");
668 app = appService.getApp(Long.valueOf(appId));
669 if(!EcompPortalUtils.checkIfRemoteCentralAccessAllowed()) {
670 app.setCentralAuth(false);
672 if (user != null && (adminRolesService.isAccountAdminOfApplication(user, app)
673 || (adminRolesService.isSuperAdmin(user) && app.getId().equals(PortalConstants.PORTAL_APP_ID))))
674 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/singleAppInfoById" + appId, GET_RESULT, app);
677 EcompPortalUtils.setBadPermissions(user, response, "createAdmin");
680 } catch (Exception e) {
681 logger.error(EELFLoggerDelegate.errorLogger, "getSingleAppInfo failed", e);
689 * HTTP servlet request
691 * HTTP servlet response
692 * @return List<OnboardingApp>
694 @GetMapping(value = { PORTAL_API_ONBOARDING_APPS }, produces = "application/json")
695 public List<OnboardingApp> getOnboardingApps(HttpServletRequest request, HttpServletResponse response) {
696 EPUser user = EPUserUtils.getUserSession(request);
697 List<OnboardingApp> onboardingApps = null;
699 if (!adminRolesService.isSuperAdmin(user) && !adminRolesService.isAccountAdmin(user)) {
700 EcompPortalUtils.setBadPermissions(user, response, "getOnboardingApps");
703 if(adminRolesService.isSuperAdmin(user)){
704 onboardingApps = appService.getOnboardingApps();
706 else if(adminRolesService.isAccountAdmin(user))
708 //get all his admin apps
709 onboardingApps = appService.getAdminAppsOfUser(user);
711 EcompPortalUtils.logAndSerializeObject(logger, PORTAL_API_ONBOARDING_APPS, GET_RESULT,
712 "onboardingApps of size " + (onboardingApps != null ? onboardingApps.size() : 0));
714 } catch (Exception e) {
715 logger.error(EELFLoggerDelegate.errorLogger, "getOnboardingApps failed", e);
718 return onboardingApps;
724 * HTTP servlet request
726 * HTTP servlet response
727 * @param modifiedOnboardingApp
729 * @return FieldsValidator
732 @PutMapping(value = { PORTAL_API_ONBOARDING_APPS }, produces = "application/json")
733 public FieldsValidator putOnboardingApp(HttpServletRequest request,
734 @RequestBody OnboardingApp modifiedOnboardingApp, HttpServletResponse response) {
735 FieldsValidator fieldsValidator = null;
737 EPApp oldEPApp = appService.getApp(modifiedOnboardingApp.id);
740 user = EPUserUtils.getUserSession(request);
741 if (!adminRolesService.isSuperAdmin(user) && !adminRolesService.isAccountAdminOfAnyActiveorInactiveApplication(user, oldEPApp) ) {
742 EcompPortalUtils.setBadPermissions(user, response, "putOnboardingApp");
743 } else if(!dataValidator.isValid(modifiedOnboardingApp)){
744 logger.error(EELFLoggerDelegate.errorLogger, "putOnboardingApp is not valid");
745 EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/onboardingApps", "POST result =",
746 response.getStatus());
747 return fieldsValidator;
749 if((oldEPApp.getCentralAuth() && modifiedOnboardingApp.isCentralAuth && !oldEPApp.getNameSpace().equalsIgnoreCase(modifiedOnboardingApp.nameSpace) && modifiedOnboardingApp.nameSpace!= null ) || (!oldEPApp.getCentralAuth() && modifiedOnboardingApp.isCentralAuth && modifiedOnboardingApp.nameSpace!= null))
751 checkIfNameSpaceIsValid(modifiedOnboardingApp, fieldsValidator, response);
753 modifiedOnboardingApp.normalize();
754 fieldsValidator = appService.modifyOnboardingApp(modifiedOnboardingApp, user);
755 response.setStatus(fieldsValidator.httpStatusCode.intValue());
757 } catch (Exception e) {
758 logger.error(EELFLoggerDelegate.errorLogger, "putOnboardingApps failed", e);
760 if(response.getStatus()==200) {
762 String oldvaluesAsJson = new ObjectMapper().writeValueAsString(oldEPApp);
763 String newvaluesAsJson = new ObjectMapper().writeValueAsString(modifiedOnboardingApp);
764 logger.info(EELFLoggerDelegate.auditLogger, "/portalApi/onboardingApps, old values ={}", oldvaluesAsJson);
765 logger.info(EELFLoggerDelegate.auditLogger, "/portalApi/onboardingApps, loginId={}, new values ={}",
766 user != null ? user.getLoginId() : "", newvaluesAsJson);
767 } catch (JsonProcessingException e) {
768 logger.error(EELFLoggerDelegate.errorLogger, "putOnboardingApps failed", e);
771 EcompPortalUtils.logAndSerializeObject(logger, PORTAL_API_ONBOARDING_APPS, PUT_RESULT,
772 response.getStatus());
773 return fieldsValidator;
781 * HTTP servlet request
783 * HTTP servlet response
784 * @param newOnboardingApp
786 * @return FieldsValidator
788 @PostMapping(value = { PORTAL_API_ONBOARDING_APPS }, produces = "application/json")
789 public FieldsValidator postOnboardingApp(HttpServletRequest request, @RequestBody OnboardingApp newOnboardingApp,
790 HttpServletResponse response) {
791 FieldsValidator fieldsValidator = null;
793 EPUser user = EPUserUtils.getUserSession(request);
794 if (!adminRolesService.isSuperAdmin(user)) {
795 EcompPortalUtils.setBadPermissions(user, response, "postOnboardingApps");
797 newOnboardingApp.normalize();
798 if(newOnboardingApp.isCentralAuth != null && newOnboardingApp.isCentralAuth)
799 checkIfNameSpaceIsValid(newOnboardingApp, fieldsValidator, response);
800 fieldsValidator = appService.addOnboardingApp(newOnboardingApp, user);
801 response.setStatus(fieldsValidator.httpStatusCode.intValue());
803 if(response.getStatus()==200) {
805 String newvaluesAsJson = new ObjectMapper().writeValueAsString(newOnboardingApp);
806 logger.info(EELFLoggerDelegate.auditLogger, "/portalApi/onboardingApps, loginId="+user.getLoginId()+", values ="+newvaluesAsJson);
807 } catch (JsonProcessingException e) {
808 logger.error(EELFLoggerDelegate.errorLogger, "postOnboardingApps failed", e);
811 } catch (Exception e) {
812 logger.error(EELFLoggerDelegate.errorLogger, "postOnboardingApp failed", e);
815 EcompPortalUtils.logAndSerializeObject(logger, PORTAL_API_ONBOARDING_APPS, "POST result =",
816 response.getStatus());
817 return fieldsValidator;
820 private FieldsValidator setResponse(HttpStatus statusCode, HttpServletResponse response)
822 FieldsValidator fieldsValidator = new FieldsValidator();
823 if (statusCode == HttpStatus.NOT_FOUND || statusCode == HttpStatus.FORBIDDEN) {
824 fieldsValidator.httpStatusCode = (long) HttpServletResponse.SC_NOT_FOUND;
825 logger.error(EELFLoggerDelegate.errorLogger, "setResponse failed"+ "invalid namespace");
826 }else if (statusCode == HttpStatus.UNAUTHORIZED) {
827 fieldsValidator.httpStatusCode = (long) HttpServletResponse.SC_UNAUTHORIZED;
828 logger.error(EELFLoggerDelegate.errorLogger, "setResponse failed"+ "unauthorized");
830 fieldsValidator.httpStatusCode = (long) HttpServletResponse.SC_BAD_REQUEST;
831 logger.error(EELFLoggerDelegate.errorLogger, "setResponse failed ",statusCode);
834 response.setStatus(fieldsValidator.httpStatusCode.intValue());
835 return fieldsValidator;
839 * REST endpoint to process a request to delete an on-boarded application.
842 * HTTP servlet request
844 * HTTP servlet response
846 * ID of app to delete
847 * @return FieldsValidator
849 @DeleteMapping(value = { "/portalApi/onboardingApps/{appId}" }, produces = "application/json")
850 public FieldsValidator deleteOnboardingApp(HttpServletRequest request, @PathVariable("appId") Long appId,
851 HttpServletResponse response) {
852 FieldsValidator fieldsValidator = null;
854 EPUser user = EPUserUtils.getUserSession(request);
855 if (!adminRolesService.isSuperAdmin(user)) {
856 EcompPortalUtils.setBadPermissions(user, response, "deleteOnboardingApps");
858 fieldsValidator = appService.deleteOnboardingApp(user, appId);
859 response.setStatus(fieldsValidator.httpStatusCode.intValue());
861 if (response.getStatus() == 200) {
862 logger.info(EELFLoggerDelegate.auditLogger,
863 "/portalApi/onboardingApps/" + appId + "deleted by user " + user.getLoginId());
865 } catch (Exception e) {
866 logger.error(EELFLoggerDelegate.errorLogger, "deleteOnboardingApp failed", e);
867 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
870 EcompPortalUtils.logAndSerializeObject(logger, PORTAL_API_ONBOARDING_APPS + appId, "DELETE result =",
871 response.getStatus());
872 return fieldsValidator;
876 * Gets the application thumbnail image; sets status 404 if none exists.
879 * HTTP servlet request
881 * HTTP servlet response
884 * @return Bytes with the app thumbnail image; null if not available.
886 @RequestMapping(value = { "/portalApi/appThumbnail/{appId}" }, method = { RequestMethod.GET })
887 public HttpEntity<byte[]> getAppThumbnail(HttpServletRequest request, @PathVariable("appId") Long appId,
888 HttpServletResponse response) {
889 EPApp app = appService.getApp(appId);
890 if (app == null || app.getImageUrl() == null || app.getThumbnail() == null || app.getThumbnail().length == 0) {
891 logger.debug(EELFLoggerDelegate.debugLogger,
892 "getAppThumbnail: no app and/or no thumbnail for app " + appId);
893 response.setStatus(HttpServletResponse.SC_NOT_FOUND);
896 String url = app.getImageUrl();
897 int indexOfDot = url.lastIndexOf('.');
898 String urlSuffix = indexOfDot > 0 ? url.substring(indexOfDot + 1).toLowerCase() : "UNK";
899 // Default to JPG if no usable suffix.
900 MediaType mediaType = MediaType.IMAGE_JPEG;
901 if ("png".equals(urlSuffix))
902 mediaType = MediaType.IMAGE_PNG;
903 else if ("gif".equals(urlSuffix))
904 mediaType = MediaType.IMAGE_GIF;
905 HttpHeaders header = new HttpHeaders();
906 header.setContentType(mediaType);
907 header.setContentLength(app.getThumbnail().length);
908 return new HttpEntity<>(app.getThumbnail(), header);
911 private void checkIfNameSpaceIsValid(OnboardingApp modifiedOnboardingApp, FieldsValidator fieldsValidator, HttpServletResponse response)
912 throws InvalidApplicationException {
914 ResponseEntity<String> res = appService.checkIfNameSpaceIsValid(modifiedOnboardingApp.nameSpace);
915 } catch (HttpClientErrorException e) {
916 logger.error(EELFLoggerDelegate.errorLogger, "checkIfNameSpaceExists failed", e);
917 EPLogUtil.logExternalAuthAccessAlarm(logger, e.getStatusCode());
918 if (e.getStatusCode() == HttpStatus.NOT_FOUND || e.getStatusCode() == HttpStatus.FORBIDDEN) {
919 fieldsValidator = setResponse(e.getStatusCode(),response);
920 throw new InvalidApplicationException("Invalid NameSpace");
922 fieldsValidator = setResponse(e.getStatusCode(),response);
925 } catch (Exception e) {
926 logger.error(EELFLoggerDelegate.errorLogger, "Exception in checkIfNameSpaceIsValid", e);
930 private boolean isNotNullAndNotValid(Object o){
931 return o!=null && !dataValidator.isValid(o);