2  * ================================================================================
 
   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
 
  11  *      http://www.apache.org/licenses/LICENSE-2.0
 
  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  * ================================================================================
 
  21 package org.openecomp.portalapp.portal.controller;
 
  23 import java.util.ArrayList;
 
  25 import javax.servlet.http.HttpServletRequest;
 
  26 import javax.servlet.http.HttpServletResponse;
 
  28 import org.openecomp.portalapp.externalsystemapproval.model.ExternalSystemRoleApproval;
 
  29 import org.openecomp.portalapp.externalsystemapproval.model.ExternalSystemUser;
 
  30 import org.openecomp.portalapp.portal.ecomp.model.PortalRestResponse;
 
  31 import org.openecomp.portalapp.portal.ecomp.model.PortalRestStatusEnum;
 
  32 import org.openecomp.portalapp.portal.logging.aop.EPAuditLog;
 
  33 import org.openecomp.portalapp.portal.service.UserRolesService;
 
  34 import org.openecomp.portalapp.portal.transport.ExternalRequestFieldsValidator;
 
  35 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
 
  36 import org.springframework.beans.factory.annotation.Autowired;
 
  37 import org.springframework.context.annotation.Configuration;
 
  38 import org.springframework.context.annotation.EnableAspectJAutoProxy;
 
  39 import org.springframework.web.bind.annotation.RequestBody;
 
  40 import org.springframework.web.bind.annotation.RequestMapping;
 
  41 import org.springframework.web.bind.annotation.RequestMethod;
 
  42 import org.springframework.web.bind.annotation.RestController;
 
  44 import io.swagger.annotations.ApiOperation;
 
  47 @RequestMapping("/auxapi")
 
  49 @EnableAspectJAutoProxy
 
  51 public class RolesApprovalSystemController implements BasicAuthenticationController {
 
  53         private EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(RolesApprovalSystemController.class);
 
  56         private UserRolesService userRolesService;
 
  59          * Creates an application user with the specified roles.
 
  63          * @return PortalRestResponse with appropriate status value and message
 
  65         @ApiOperation(value = "Creates an application user with the specified roles.", response = PortalRestResponse.class)
 
  66         @RequestMapping(value = { "/userProfile" }, method = RequestMethod.POST, produces = "application/json")
 
  67         public PortalRestResponse<String> postUserProfile(HttpServletRequest request,
 
  68                         @RequestBody ExternalSystemUser extSysUser, HttpServletResponse response) {
 
  69                 ExternalRequestFieldsValidator reqResult = null;
 
  71                         logger.info(EELFLoggerDelegate.debugLogger, "postUserProfile: request received for app {}, user {}",
 
  72                                         extSysUser.getApplicationName(), extSysUser.getLoginId());
 
  74                         validateExtSystemUser(extSysUser, true);
 
  75                  reqResult = userRolesService.setExternalRequestUserAppRole(extSysUser, "POST");
 
  76                  if (!reqResult.isResult())
 
  77                                 throw new Exception(reqResult.getDetailMessage());
 
  78                 } catch (Exception e) {
 
  79                         logger.error(EELFLoggerDelegate.errorLogger, "postUserProfile: failed for app {}, user {}",
 
  80                                         extSysUser.getApplicationName(), extSysUser.getLoginId(), e);
 
  81                         if(reqResult == null || (!reqResult.isResult()  && !e.getMessage().contains("404"))){
 
  82                                 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
 
  83                                 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
 
  84                                                 e.getMessage(), "save user profile failed"); 
 
  85                     } else if(e.getMessage().contains("404")){
 
  86                                 response.setStatus(HttpServletResponse.SC_NOT_FOUND);
 
  87                                 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
 
  88                                                 e.getMessage(), "save user profile failed");
 
  90                                 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
 
  91                                 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
 
  92                                                 e.getMessage(), "save user profile failed");
 
  95                 return new PortalRestResponse<String>(PortalRestStatusEnum.OK, reqResult.getDetailMessage(), "Success");
 
  99          * Updates an application user to have only the specified roles.
 
 103          * @return PortalRestResponse with appropriate status value and message
 
 105         @ApiOperation(value = "Updates an application user to have only the specified roles.", response = PortalRestResponse.class)
 
 106         @RequestMapping(value = { "/userProfile" }, method = RequestMethod.PUT, produces = "application/json")
 
 107         public PortalRestResponse<String> putUserProfile(HttpServletRequest request,
 
 108                         @RequestBody ExternalSystemUser extSysUser, HttpServletResponse response) {
 
 109                 ExternalRequestFieldsValidator reqResult = null;
 
 111                         logger.info(EELFLoggerDelegate.debugLogger, "putUserProfile: request received for app {}, user {}", 
 
 112                                         extSysUser.getApplicationName(), extSysUser.getLoginId());
 
 113                         validateExtSystemUser(extSysUser, true);
 
 114                         reqResult = userRolesService.setExternalRequestUserAppRole(extSysUser, "PUT");
 
 115                          if (!reqResult.isResult())
 
 116                                         throw new Exception(reqResult.getDetailMessage());
 
 117                 } catch (Exception e) {
 
 118                         logger.error(EELFLoggerDelegate.errorLogger, "putUserProfile: failed for app {}, user {}",
 
 119                                         extSysUser.getApplicationName(), extSysUser.getLoginId(), e);
 
 120                         if(reqResult == null || (!reqResult.isResult()  && !e.getMessage().contains("404"))){
 
 121                                 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
 
 122                                 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
 
 123                                                 e.getMessage(), "save user profile failed"); 
 
 124                     } else if(e.getMessage().contains("404")){
 
 125                                 response.setStatus(HttpServletResponse.SC_NOT_FOUND);
 
 126                                 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
 
 127                                                 e.getMessage(), "save user profile failed");
 
 129                                 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
 
 130                                 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
 
 131                                                 e.getMessage(), "save user profile failed");
 
 134                 return new PortalRestResponse<String>(PortalRestStatusEnum.OK, reqResult.getDetailMessage() , "Success");
 
 138          * Deletes an application user by removing all assigned roles.
 
 142          *            This object must have zero roles.
 
 143          * @return PortalRestResponse with appropriate status value and message
 
 145         @ApiOperation(value = "Processes a request to delete one or more application roles for one      specified user who has roles.", response = PortalRestResponse.class)
 
 146         @RequestMapping(value = { "/userProfile" }, method = RequestMethod.DELETE, produces = "application/json")
 
 147         public PortalRestResponse<String> deleteUserProfile(HttpServletRequest request,
 
 148                         @RequestBody ExternalSystemUser extSysUser, HttpServletResponse response) {
 
 149                 ExternalRequestFieldsValidator reqResult  = null;
 
 151                         logger.info(EELFLoggerDelegate.debugLogger, "deleteUserProfile: request received for app {}, user {}", 
 
 152                                         extSysUser.getApplicationName(), extSysUser.getLoginId());
 
 153                         validateExtSystemUser(extSysUser, false);
 
 154                         // Ignore any roles that might be mistakenly present in the request
 
 155                         extSysUser.setRoles(new ArrayList<ExternalSystemRoleApproval>());
 
 156                         reqResult = userRolesService.setExternalRequestUserAppRole(extSysUser, "DELETE");
 
 157                          if (!reqResult.isResult())
 
 158                                         throw new Exception(reqResult.getDetailMessage());
 
 159                 } catch (Exception e) {
 
 160                         logger.error(EELFLoggerDelegate.errorLogger, "deleteUserProfile: failed for app {}, user {}",
 
 161                                         extSysUser.getApplicationName(), extSysUser.getLoginId(), e);
 
 162                         if(reqResult == null || (!reqResult.isResult()  && !e.getMessage().contains("404"))){
 
 163                                 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
 
 164                                 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
 
 165                                                 e.getMessage(), "delete user profile failed"); 
 
 166                     }else if(e.getMessage().contains("404")){
 
 167                                 response.setStatus(HttpServletResponse.SC_NOT_FOUND);
 
 168                                 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
 
 169                                                 e.getMessage(), "delete user profile failed");
 
 171                                 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
 
 172                                 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
 
 173                                                 e.getMessage(), "delete user profile failed");
 
 176                 return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Deleted Successfully", "Success");
 
 180          * Checks for presence of required fields.
 
 183          * @param rolesRequired
 
 184          *            If true, checks whether roles are present
 
 186          *             If any field is missing.
 
 188         private void validateExtSystemUser(ExternalSystemUser extSysUser, boolean rolesRequired) throws Exception {
 
 189                 if (extSysUser.getLoginId() == null || extSysUser.getLoginId() == "")
 
 190                         throw new Exception("Request has no login ID");
 
 191                 if (extSysUser.getApplicationName() == null || extSysUser.getApplicationName() == "")
 
 192                         throw new Exception("Request has no application name");
 
 193                 if (extSysUser.getMyloginrequestId() == null)
 
 194                         throw new Exception("Request has no request ID");
 
 195                 if (rolesRequired && (extSysUser.getRoles() == null || extSysUser.getRoles().size() == 0))
 
 196                         throw new Exception("Request has no roles");