X-Git-Url: https://gerrit.onap.org/r/gitweb?p=portal.git;a=blobdiff_plain;f=portal-BE%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fportal%2Fcontroller%2FWidgetsController.java;h=571cbc136a308a353de742c9c78175b637b07ab9;hp=e40efe11c1b9ec7c9045091bc875819710dca425;hb=26abc89a7ce21999cccd88b77cd2ecda21cbe905;hpb=880ba87b59dba2375b42095a85eb781bc8b4b867 diff --git a/portal-BE/src/main/java/org/onap/portal/controller/WidgetsController.java b/portal-BE/src/main/java/org/onap/portal/controller/WidgetsController.java index e40efe11..571cbc13 100644 --- a/portal-BE/src/main/java/org/onap/portal/controller/WidgetsController.java +++ b/portal-BE/src/main/java/org/onap/portal/controller/WidgetsController.java @@ -40,6 +40,7 @@ package org.onap.portal.controller; +import java.io.IOException; import java.security.Principal; import java.util.List; import javax.servlet.http.HttpServletRequest; @@ -47,83 +48,97 @@ import javax.servlet.http.HttpServletResponse; import org.onap.portal.domain.db.fn.FnUser; import org.onap.portal.domain.dto.transport.FieldsValidator; import org.onap.portal.domain.dto.transport.OnboardingWidget; +import org.onap.portal.domain.dto.transport.WidgetCatalogPersonalization; +import org.onap.portal.exception.NotValidDataException; +import org.onap.portal.logging.aop.EPAuditLog; import org.onap.portal.service.AdminRolesService; +import org.onap.portal.service.PersUserWidgetService; import org.onap.portal.service.WidgetService; import org.onap.portal.service.fn.FnUserService; import org.onap.portal.utils.EcompPortalUtils; import org.onap.portal.validation.DataValidator; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.EnableAspectJAutoProxy; +import org.springframework.http.MediaType; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +@EPAuditLog @RestController -@Configuration @EnableAspectJAutoProxy public class WidgetsController { + private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(WidgetsController.class); private final FnUserService fnUserService; private final WidgetService widgetService; private final AdminRolesService adminRolesService; private final DataValidator dataValidator; + private final PersUserWidgetService persUserWidgetService; @Autowired - public WidgetsController(FnUserService fnUserService, WidgetService widgetService, - AdminRolesService adminRolesService, DataValidator dataValidator) { + public WidgetsController(final FnUserService fnUserService, final WidgetService widgetService, + final AdminRolesService adminRolesService, final DataValidator dataValidator, + final PersUserWidgetService persUserWidgetService) { this.fnUserService = fnUserService; this.widgetService = widgetService; this.adminRolesService = adminRolesService; this.dataValidator = dataValidator; + this.persUserWidgetService = persUserWidgetService; } - @RequestMapping(value = { "/portalApi/widgets" }, method = RequestMethod.GET, produces = "application/json") - public List getOnboardingWidgets(Principal principal, HttpServletRequest request, HttpServletResponse response) { + @GetMapping(value = {"/portalApi/widgets"}, produces = MediaType.APPLICATION_JSON_VALUE) + public List getOnboardingWidgets(Principal principal, HttpServletRequest request, + HttpServletResponse response) { FnUser user = fnUserService.loadUserByUsername(principal.getName()); List onboardingWidgets = null; - - if (user == null || user.isGuest()) { + if (user.getGuest()) { EcompPortalUtils.setBadPermissions(user, response, "getOnboardingWidgets"); } else { String getType = request.getHeader("X-Widgets-Type"); if (!getType.isEmpty() && ("managed".equals(getType) || "all".equals(getType))) { onboardingWidgets = widgetService.getOnboardingWidgets(user, "managed".equals(getType)); } else { - logger.debug(EELFLoggerDelegate.debugLogger, "WidgetsController.getOnboardingApps - request must contain header 'X-Widgets-Type' with 'all' or 'managed'"); + logger.debug(EELFLoggerDelegate.debugLogger, + "WidgetsController.getOnboardingApps - request must contain header 'X-Widgets-Type' with 'all' or 'managed'"); response.setStatus(HttpServletResponse.SC_BAD_REQUEST); } } - EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/widgets", "GET result =", response.getStatus()); + EcompPortalUtils + .logAndSerializeObject(logger, "/portalApi/widgets", "GET result =", response.getStatus()); return onboardingWidgets; } - @RequestMapping(value = { "/portalApi/widgets/{widgetId}" }, method = { RequestMethod.PUT }, produces = "application/json") - public FieldsValidator putOnboardingWidget(Principal principal, HttpServletRequest request, @PathVariable("widgetId") Long widgetId, + @PutMapping(value = {"/portalApi/widgets/{widgetId}"}, produces = MediaType.APPLICATION_JSON_VALUE) + @PreAuthorize("hasRole('System_Administrator')") + public FieldsValidator putOnboardingWidget(Principal principal, @PathVariable("widgetId") Long widgetId, @RequestBody OnboardingWidget onboardingWidget, HttpServletResponse response) { FnUser user = fnUserService.loadUserByUsername(principal.getName()); FieldsValidator fieldsValidator = null; - if (onboardingWidget!=null){ - if(!dataValidator.isValid(onboardingWidget)){ - fieldsValidator = new FieldsValidator(); - fieldsValidator.setHttpStatusCode((long)HttpServletResponse.SC_NOT_ACCEPTABLE); - return fieldsValidator; - } - } - if (userHasPermissions(user, response, "putOnboardingWidget")) { - assert onboardingWidget != null; - onboardingWidget.setId(widgetId); - onboardingWidget.normalize(); + assert onboardingWidget != null; + onboardingWidget.setId(widgetId); + onboardingWidget.normalize(); + try { fieldsValidator = widgetService.setOnboardingWidget(user, onboardingWidget); response.setStatus(fieldsValidator.getHttpStatusCode().intValue()); + } catch (IllegalArgumentException e) { + fieldsValidator = new FieldsValidator(); + fieldsValidator.setHttpStatusCode((long) HttpServletResponse.SC_NOT_ACCEPTABLE); + fieldsValidator.addProblematicFieldName(e.getMessage()); + return fieldsValidator; } - EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/widgets/" + widgetId, "GET result =", response.getStatus()); + + EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/widgets/" + widgetId, "GET result =", + response.getStatus()); return fieldsValidator; } @@ -135,4 +150,77 @@ public class WidgetsController { } return true; } + + @PostMapping(value = {"/portalApi/widgets"}, produces = MediaType.APPLICATION_JSON_VALUE) + public FieldsValidator postOnboardingWidget(Principal principal, HttpServletResponse response, + @RequestBody OnboardingWidget onboardingWidget) { + FnUser user = fnUserService.loadUserByUsername(principal.getName()); + FieldsValidator fieldsValidator = new FieldsValidator(); + + if (onboardingWidget != null) { + if (!dataValidator.isValid(onboardingWidget)) { + fieldsValidator.setHttpStatusCode((long) HttpServletResponse.SC_NOT_ACCEPTABLE); + return fieldsValidator; + } + } + + if (userHasPermissions(user, response, "postOnboardingWidget")) { + onboardingWidget.setId(null); + onboardingWidget.normalize(); + try { + fieldsValidator = widgetService.setOnboardingWidget(user, onboardingWidget); + } catch (Exception e) { + fieldsValidator.setHttpStatusCode((long) HttpServletResponse.SC_BAD_REQUEST); + } + response.setStatus(fieldsValidator.getHttpStatusCode().intValue()); + } + + EcompPortalUtils + .logAndSerializeObject(logger, "/portalApi/widgets", "POST result =", response.getStatus()); + return fieldsValidator; + } + + @DeleteMapping(value = {"/portalApi/widgets/{widgetId}"}, produces = MediaType.APPLICATION_JSON_VALUE) + public FieldsValidator deleteOnboardingWidget(Principal principal, HttpServletResponse response, + @PathVariable("widgetId") Long widgetId) { + FnUser user = fnUserService.loadUserByUsername(principal.getName()); + FieldsValidator fieldsValidator = null; + + if (userHasPermissions(user, response, "deleteOnboardingWidget")) { + fieldsValidator = widgetService.deleteOnboardingWidget(user, widgetId); + response.setStatus(fieldsValidator.getHttpStatusCode().intValue()); + } + + EcompPortalUtils.logAndSerializeObject(logger, "/portalApi/widgets/" + widgetId, "DELETE result =", + response.getStatus()); + return fieldsValidator; + } + + @PutMapping(value = {"portalApi/widgetCatalogSelection"}, produces = MediaType.APPLICATION_JSON_VALUE) + public FieldsValidator putWidgetCatalogSelection(Principal principal, + @RequestBody WidgetCatalogPersonalization persRequest, HttpServletResponse response) throws IOException { + FieldsValidator result = new FieldsValidator(); + FnUser user = fnUserService.loadUserByUsername(principal.getName()); + + if (persRequest != null) { + if (!dataValidator.isValid(persRequest)) { + result.setHttpStatusCode((long) HttpServletResponse.SC_NOT_ACCEPTABLE); + return result; + } + } + try { + assert persRequest != null; + if (persRequest.getWidgetId() == null || user == null) { + EcompPortalUtils.setBadPermissions(user, response, "putWidgetCatalogSelection"); + } else { + persUserWidgetService + .setPersUserAppValue(user, persRequest.getWidgetId(), persRequest.getSelect()); + } + } catch (Exception e) { + logger.error(EELFLoggerDelegate.errorLogger, "Failed in putAppCatalogSelection", e); + response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e.toString()); + } + result.setHttpStatusCode((long) HttpServletResponse.SC_OK); + return result; + } }