2 * ============LICENSE_START==========================================
4 * ===================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ===================================================================
8 * Unless otherwise specified, all software contained herein is licensed
9 * under the Apache License, Version 2.0 (the "License");
10 * you may not use this software except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
21 * Unless otherwise specified, all documentation contained herein is licensed
22 * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
23 * you may not use this documentation except in compliance with the License.
24 * You may obtain a copy of the License at
26 * https://creativecommons.org/licenses/by/4.0/
28 * Unless required by applicable law or agreed to in writing, documentation
29 * distributed under the License is distributed on an "AS IS" BASIS,
30 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
31 * See the License for the specific language governing permissions and
32 * limitations under the License.
34 * ============LICENSE_END============================================
36 * ECOMP is a trademark and service mark of AT&T Intellectual Property.
38 package org.onap.portalapp.portal.controller;
41 import java.io.IOException;
42 import java.util.HashMap;
43 import java.util.List;
46 import javax.servlet.http.HttpServletRequest;
47 import javax.servlet.http.HttpServletResponse;
49 import org.apache.commons.lang.StringUtils;
50 import org.onap.portalapp.portal.domain.CentralV2RoleFunction;
51 import org.onap.portalapp.portal.domain.EPApp;
52 import org.onap.portalapp.portal.domain.EPUser;
53 import org.onap.portalapp.portal.domain.EcompAuditLog;
54 import org.onap.portalapp.portal.ecomp.model.PortalRestResponse;
55 import org.onap.portalapp.portal.ecomp.model.PortalRestStatusEnum;
56 import org.onap.portalapp.portal.exceptions.InvalidRoleException;
57 import org.onap.portalapp.portal.logging.aop.EPAuditLog;
58 import org.onap.portalapp.portal.logging.aop.EPEELFLoggerAdvice;
59 import org.onap.portalapp.portal.logging.logic.EPLogUtil;
60 import org.onap.portalapp.portal.service.ExternalAccessRolesService;
61 import org.onap.portalapp.portal.transport.CentralRole;
62 import org.onap.portalapp.portal.transport.CentralRoleFunction;
63 import org.onap.portalapp.portal.transport.CentralUser;
64 import org.onap.portalapp.portal.transport.CentralV2Role;
65 import org.onap.portalapp.portal.transport.ExternalRequestFieldsValidator;
66 import org.onap.portalapp.portal.utils.EPCommonSystemProperties;
67 import org.onap.portalapp.portal.utils.EcompPortalUtils;
68 import org.onap.portalapp.portal.utils.PortalConstants;
69 import org.onap.portalsdk.core.domain.AuditLog;
70 import org.onap.portalsdk.core.domain.Role;
71 import org.onap.portalsdk.core.domain.RoleFunction;
72 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
73 import org.onap.portalsdk.core.restful.domain.EcompUser;
74 import org.onap.portalsdk.core.service.AuditService;
75 import org.onap.portalsdk.core.util.SystemProperties;
77 import org.springframework.beans.BeanUtils;
78 import org.springframework.beans.factory.annotation.Autowired;
79 import org.springframework.context.annotation.EnableAspectJAutoProxy;
80 import org.springframework.http.ResponseEntity;
81 import org.springframework.web.bind.annotation.PathVariable;
82 import org.springframework.web.bind.annotation.RequestBody;
83 import org.springframework.web.bind.annotation.RequestMapping;
84 import org.springframework.web.bind.annotation.RequestMethod;
85 import org.springframework.web.bind.annotation.RestController;
86 import org.springframework.web.client.RestTemplate;
88 import com.fasterxml.jackson.databind.DeserializationFeature;
89 import com.fasterxml.jackson.databind.ObjectMapper;
91 import io.swagger.annotations.ApiOperation;
94 @RequestMapping("/auxapi")
95 @org.springframework.context.annotation.Configuration
96 @EnableAspectJAutoProxy
98 public class ExternalAccessRolesController implements BasicAuthenticationController {
100 private static final String ROLE_INVALID_CHARS = "%=():,\"\"";
102 private static final String SUCCESSFULLY_DELETED = "Successfully Deleted";
104 private static final String INVALID_UEB_KEY = "Invalid uebkey!";
106 private static final String LOGIN_ID = "LoginId";
108 RestTemplate template = new RestTemplate();
111 private AuditService auditService;
113 private static final String UEBKEY = "uebkey";
115 private static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ExternalAccessRolesController.class);
118 private ExternalAccessRolesService externalAccessRolesService;
120 @ApiOperation(value = "Gets user role for an application.", response = CentralUser.class, responseContainer="List")
121 @RequestMapping(value = {
122 "/user/{loginId}" }, method = RequestMethod.GET, produces = "application/json")
123 public CentralUser getUser(HttpServletRequest request, HttpServletResponse response,
124 @PathVariable("loginId") String loginId) throws Exception {
126 CentralUser answer = null;
128 fieldsValidation(request);
129 answer = externalAccessRolesService.getUserRoles(loginId, request.getHeader(UEBKEY));
130 } catch (Exception e) {
131 sendErrorResponse(response, e);
132 logger.error(EELFLoggerDelegate.errorLogger, "getUser failed", e);
137 @ApiOperation(value = "Gets user roles for an application which is upgraded to newer version.", response = String.class, responseContainer="List")
138 @RequestMapping(value = {
139 "/v2/user/{loginId}" }, method = RequestMethod.GET, produces = "application/json")
140 public String getV2UserList(HttpServletRequest request, HttpServletResponse response,
141 @PathVariable("loginId") String loginId) throws Exception {
142 String answer = null;
144 fieldsValidation(request);
145 answer = externalAccessRolesService.getV2UserWithRoles(loginId, request.getHeader(UEBKEY));
146 } catch (Exception e) {
147 sendErrorResponse(response, e);
148 logger.error(EELFLoggerDelegate.errorLogger, "getV2UserList failed", e);
153 @ApiOperation(value = "Gets roles for an application.", response = CentralRole.class, responseContainer="Json")
154 @RequestMapping(value = {
155 "/roles" }, method = RequestMethod.GET, produces = "application/json")
156 public List<CentralRole> getRolesForApp(HttpServletRequest request, HttpServletResponse response) throws Exception {
157 logger.debug(EELFLoggerDelegate.debugLogger, "Request received for getRolesForApp");
158 List<CentralV2Role> v2CenRole = null;
159 List<CentralRole> cenRole = null;
161 fieldsValidation(request);
162 EPApp app = externalAccessRolesService.getApp(request.getHeader(UEBKEY)).get(0);
163 // Sync all roles from external system into Ecomp portal DB
164 logger.debug(EELFLoggerDelegate.debugLogger, "getRolesForApp: Entering into syncApplicationRolesWithEcompDB");
165 externalAccessRolesService.syncApplicationRolesWithEcompDB(app);
166 logger.debug(EELFLoggerDelegate.debugLogger, "getRolesForApp: Finished syncApplicationRolesWithEcompDB");
167 v2CenRole = externalAccessRolesService.getRolesForApp(request.getHeader(UEBKEY));
168 cenRole = externalAccessRolesService.convertV2CentralRoleListToOldVerisonCentralRoleList(v2CenRole);
169 } catch (Exception e) {
170 sendErrorResponse(response, e);
171 logger.error(EELFLoggerDelegate.errorLogger, "getRolesForApp failed", e);
173 logger.debug(EELFLoggerDelegate.debugLogger, "Request completed for getRolesForApp");
177 @ApiOperation(value = "Gets roles for an application which is upgraded to newer version.", response = CentralV2Role.class, responseContainer="Json")
178 @RequestMapping(value = {
179 "/v2/roles" }, method = RequestMethod.GET, produces = "application/json")
180 public List<CentralV2Role> getV2RolesForApp(HttpServletRequest request, HttpServletResponse response) throws Exception {
181 logger.debug(EELFLoggerDelegate.debugLogger, "Request received for getV2RolesForApp");
182 List<CentralV2Role> answer = null;
184 fieldsValidation(request);
185 EPApp app = externalAccessRolesService.getApp(request.getHeader(UEBKEY)).get(0);
186 // Sync all roles from external system into Ecomp portal DB
187 logger.debug(EELFLoggerDelegate.debugLogger, "getV2RolesForApp: Entering into syncApplicationRolesWithEcompDB");
188 externalAccessRolesService.syncApplicationRolesWithEcompDB(app);
189 logger.debug(EELFLoggerDelegate.debugLogger, "getV2RolesForApp: Finished syncApplicationRolesWithEcompDB");
190 answer = externalAccessRolesService.getRolesForApp(request.getHeader(UEBKEY));
191 } catch (Exception e) {
192 sendErrorResponse(response, e);
193 logger.error(EELFLoggerDelegate.errorLogger, "getV2RolesForApp failed", e);
195 logger.debug(EELFLoggerDelegate.debugLogger, "Request completed for getV2RolesForApp");
199 @ApiOperation(value = "Gets all role functions for an application for older version.", response = CentralRoleFunction.class, responseContainer="Json")
200 @RequestMapping(value = {
201 "/functions" }, method = RequestMethod.GET, produces = "application/json")
202 public List<RoleFunction> getRoleFunctionsList(HttpServletRequest request, HttpServletResponse response)
204 List<CentralV2RoleFunction> answer = null;
205 List<RoleFunction> roleFuncList = null;
206 logger.debug(EELFLoggerDelegate.debugLogger, "Request received for getRoleFunctionsList");
208 fieldsValidation(request);
209 EPApp app = externalAccessRolesService.getApp(request.getHeader(UEBKEY)).get(0);
210 // Sync all functions from external system into Ecomp portal DB
211 logger.debug(EELFLoggerDelegate.debugLogger, "getRoleFunctionsList: Entering into syncRoleFunctionFromExternalAccessSystem");
212 externalAccessRolesService.syncRoleFunctionFromExternalAccessSystem(app);
213 logger.debug(EELFLoggerDelegate.debugLogger, "getRoleFunctionsList: Finished syncRoleFunctionFromExternalAccessSystem");
214 answer = externalAccessRolesService.getRoleFuncList(request.getHeader(UEBKEY));
215 roleFuncList = externalAccessRolesService.convertCentralRoleFunctionToRoleFunctionObject(answer);
216 } catch (Exception e) {
217 sendErrorResponse(response, e);
218 logger.error(EELFLoggerDelegate.errorLogger, "getRoleFunctionsList failed", e);
220 logger.debug(EELFLoggerDelegate.debugLogger, "Request completed for getRoleFunctionsList");
224 @ApiOperation(value = "Gets all role functions for an application which is upgraded to newer version.", response = CentralV2RoleFunction.class, responseContainer="Json")
225 @RequestMapping(value = {
226 "/v2/functions" }, method = RequestMethod.GET, produces = "application/json")
227 public List<CentralV2RoleFunction> getV2RoleFunctionsList(HttpServletRequest request, HttpServletResponse response)
229 List<CentralV2RoleFunction> cenRoleFuncList = null;
230 logger.debug(EELFLoggerDelegate.debugLogger, "Request received for getV2RoleFunctionsList");
232 fieldsValidation(request);
233 EPApp app = externalAccessRolesService.getApp(request.getHeader(UEBKEY)).get(0);
234 // Sync all functions from external system into Ecomp portal DB
235 logger.debug(EELFLoggerDelegate.debugLogger, "getV2RoleFunctionsList: Entering into syncRoleFunctionFromExternalAccessSystem");
236 externalAccessRolesService.syncRoleFunctionFromExternalAccessSystem(app);
237 logger.debug(EELFLoggerDelegate.debugLogger, "getV2RoleFunctionsList: Finished syncRoleFunctionFromExternalAccessSystem");
238 cenRoleFuncList = externalAccessRolesService.getRoleFuncList(request.getHeader(UEBKEY));
239 } catch (Exception e) {
240 sendErrorResponse(response, e);
241 logger.error(EELFLoggerDelegate.errorLogger, "getV2RoleFunctionsList failed", e);
243 logger.debug(EELFLoggerDelegate.debugLogger, "Request completed for getV2RoleFunctionsList");
244 return cenRoleFuncList;
247 @ApiOperation(value = "Gets role information for an application.", response = CentralRole.class, responseContainer="Json")
248 @RequestMapping(value = {
249 "/role/{role_id}" }, method = RequestMethod.GET, produces = "application/json")
250 public CentralRole getRoleInfo(HttpServletRequest request, HttpServletResponse response,
251 @PathVariable("role_id") Long roleId) throws Exception {
252 CentralV2Role answer = null;
253 CentralRole cenRole = null;
254 logger.debug(EELFLoggerDelegate.debugLogger, "Request received for getRoleInfo");
256 fieldsValidation(request);
257 answer = externalAccessRolesService.getRoleInfo(roleId, request.getHeader(UEBKEY));
258 cenRole = externalAccessRolesService.convertV2CentralRoleToOldVerisonCentralRole(answer);
259 } catch (Exception e) {
260 sendErrorResponse(response, e);
261 logger.error(EELFLoggerDelegate.errorLogger, "getRoleInfo failed", e);
263 logger.debug(EELFLoggerDelegate.debugLogger, "Request completed for getRoleInfo");
267 @ApiOperation(value = "Gets v2 role information for an application which is upgraded to newer version.", response = CentralV2Role.class, responseContainer="Json")
268 @RequestMapping(value = {
269 "/v2/role/{role_id}" }, method = RequestMethod.GET, produces = "application/json")
270 public CentralV2Role getV2RoleInfo(HttpServletRequest request, HttpServletResponse response,
271 @PathVariable("role_id") Long roleId) throws Exception {
272 CentralV2Role answer = null;
273 logger.debug(EELFLoggerDelegate.debugLogger, "Request received for getV2RoleInfo");
275 fieldsValidation(request);
276 answer = externalAccessRolesService.getRoleInfo(roleId, request.getHeader(UEBKEY));
277 } catch (Exception e) {
278 sendErrorResponse(response, e);
279 logger.error(EELFLoggerDelegate.errorLogger, "getV2RoleInfo failed", e);
281 logger.debug(EELFLoggerDelegate.debugLogger, "Request completed for getV2RoleInfo");
285 @ApiOperation(value = "Gets role information for an application provided by function code.", response = CentralRoleFunction.class, responseContainer = "Json")
286 @RequestMapping(value = { "/function/{code}" }, method = RequestMethod.GET, produces = "application/json")
287 public CentralRoleFunction getRoleFunction(HttpServletRequest request, HttpServletResponse response,
288 @PathVariable("code") String code) throws Exception {
289 CentralV2RoleFunction centralV2RoleFunction = null;
290 CentralRoleFunction centralRoleFunction = new CentralRoleFunction();
292 fieldsValidation(request);
293 centralV2RoleFunction = externalAccessRolesService.getRoleFunction(code, request.getHeader(UEBKEY));
294 if(centralV2RoleFunction != null && EcompPortalUtils.getFunctionCode(centralV2RoleFunction.getCode()).equals(code)) {
295 BeanUtils.copyProperties(centralV2RoleFunction, centralRoleFunction, "type","action");
297 } catch (Exception e) {
298 sendErrorResponse(response, e);
299 logger.error(EELFLoggerDelegate.errorLogger, "getRoleFunction failed", e);
301 return centralRoleFunction;
304 @ApiOperation(value = "Gets role information for an application provided by function code.", response = CentralV2RoleFunction.class, responseContainer = "Json")
305 @RequestMapping(value = { "/v2/function/{code}" }, method = RequestMethod.GET, produces = "application/json")
306 public CentralV2RoleFunction getV2RoleFunction(HttpServletRequest request, HttpServletResponse response,
307 @PathVariable("code") String code) throws Exception {
308 CentralV2RoleFunction centralV2RoleFunction = null;
310 fieldsValidation(request);
311 centralV2RoleFunction = externalAccessRolesService.getRoleFunction(code, request.getHeader(UEBKEY));
312 if(centralV2RoleFunction == null || !EcompPortalUtils.getFunctionCode(centralV2RoleFunction.getCode()).equals(code)) {
313 centralV2RoleFunction = new CentralV2RoleFunction();
315 } catch (Exception e) {
316 sendErrorResponse(response, e);
317 logger.error(EELFLoggerDelegate.errorLogger, "getV2RoleFunction failed", e);
319 return centralV2RoleFunction;
322 @ApiOperation(value = "Saves role function for an application.", response = PortalRestResponse.class, responseContainer = "Json")
323 @RequestMapping(value = { "/roleFunction" }, method = RequestMethod.POST, produces = "application/json")
324 public PortalRestResponse<String> saveRoleFunction(HttpServletRequest request, HttpServletResponse response,
325 @RequestBody String roleFunc) throws Exception {
327 fieldsValidation(request);
328 String data = roleFunc;
329 ObjectMapper mapper = new ObjectMapper();
330 List<EPApp> applicationList = externalAccessRolesService.getApp(request.getHeader(UEBKEY));
331 EPApp requestedApp = applicationList.get(0);
332 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
333 CentralV2RoleFunction availableRoleFunction = mapper.readValue(data, CentralV2RoleFunction.class);
334 CentralV2RoleFunction domainRoleFunction = externalAccessRolesService.getRoleFunction(availableRoleFunction.getCode(),
335 requestedApp.getUebKey());
336 boolean saveOrUpdateResponse = false;
337 if (domainRoleFunction != null) {
338 domainRoleFunction.setName(availableRoleFunction.getName());
339 saveOrUpdateResponse = externalAccessRolesService.saveCentralRoleFunction(domainRoleFunction,
342 availableRoleFunction.setAppId(requestedApp.getId());
343 saveOrUpdateResponse = externalAccessRolesService.saveCentralRoleFunction(availableRoleFunction,
346 if (saveOrUpdateResponse) {
347 EPUser user = externalAccessRolesService.getUser(request.getHeader(LOGIN_ID)).get(0);
348 EPApp app = externalAccessRolesService.getApp(request.getHeader(UEBKEY)).get(0);
349 CentralV2RoleFunction function = externalAccessRolesService
350 .getRoleFunction(availableRoleFunction.getCode(), request.getHeader(UEBKEY));
351 String activityCode = (function.getCode() == null)
352 ? EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_ADD_FUNCTION
353 : EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_UPDATE_FUNCTION;
354 logger.info(EELFLoggerDelegate.applicationLogger, "saveRoleFunction: succeeded for app {}, function {}",
355 app.getId(), availableRoleFunction.getCode());
356 AuditLog auditLog = new AuditLog();
357 auditLog.setUserId(user.getId());
358 auditLog.setActivityCode(activityCode);
359 auditLog.setComments(
360 EcompPortalUtils.truncateString(
361 "saveRoleFunction role for app:" + app.getId() + " and function:'"
362 + availableRoleFunction.getCode() + "'",
363 PortalConstants.AUDIT_LOG_COMMENT_SIZE));
364 auditLog.setAffectedRecordId(user.getOrgUserId());
365 auditService.logActivity(auditLog, null);
366 MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
367 MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
368 EcompPortalUtils.calculateDateTimeDifferenceForLog(
369 MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),
370 MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
371 logger.info(EELFLoggerDelegate.auditLogger,
372 EPLogUtil.formatAuditLogMessage("ExternalAccessRolesController.saveRoleFunction", activityCode,
373 String.valueOf(user.getId()), user.getOrgUserId(), availableRoleFunction.getCode()));
374 MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
375 MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
376 MDC.remove(SystemProperties.MDC_TIMER);
378 logger.error(EELFLoggerDelegate.errorLogger, "saveRoleFunction failed");
379 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
380 "Failed to saveRoleFunction for '" + availableRoleFunction.getCode() + "'", "Failed");
382 } catch (Exception e) {
383 if (e.getMessage().contains(INVALID_UEB_KEY)) {
384 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
386 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
388 logger.error(EELFLoggerDelegate.errorLogger, "saveRoleFunction failed", e);
389 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, e.getMessage(), "Failed");
391 return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Successfully Saved", "Success");
394 @ApiOperation(value = "Deletes role function for an application.", response = PortalRestResponse.class, responseContainer = "Json")
395 @RequestMapping(value = { "/roleFunction/{code}" }, method = RequestMethod.DELETE, produces = "application/json")
396 public PortalRestResponse<String> deleteRoleFunction(HttpServletRequest request, HttpServletResponse response,
397 @PathVariable("code") String code) throws Exception {
399 fieldsValidation(request);
400 EPUser user = externalAccessRolesService.getUser(request.getHeader(LOGIN_ID)).get(0);
401 EPApp app = externalAccessRolesService.getApp(request.getHeader(UEBKEY)).get(0);
402 boolean getDelFuncResponse = externalAccessRolesService.deleteCentralRoleFunction(code, app);
403 if (getDelFuncResponse) {
404 logger.info(EELFLoggerDelegate.applicationLogger, "deleteRoleFunction: succeeded for app {}, role {}",
406 AuditLog auditLog = new AuditLog();
407 auditLog.setUserId(user.getId());
408 auditLog.setActivityCode(EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_DELETE_FUNCTION);
409 auditLog.setComments(EcompPortalUtils.truncateString(
410 "Deleted function for app:" + app.getId() + " and function code:'" + code + "'",
411 PortalConstants.AUDIT_LOG_COMMENT_SIZE));
412 auditLog.setAffectedRecordId(user.getOrgUserId());
413 auditService.logActivity(auditLog, null);
414 MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
415 MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
416 EcompPortalUtils.calculateDateTimeDifferenceForLog(
417 MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),
418 MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
419 logger.info(EELFLoggerDelegate.auditLogger,
420 EPLogUtil.formatAuditLogMessage("ExternalAccessRolesController.deleteRoleFunction",
421 EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_DELETE_FUNCTION, String.valueOf(user.getId()),
422 user.getOrgUserId(), code));
423 MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
424 MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
425 MDC.remove(SystemProperties.MDC_TIMER);
427 logger.error(EELFLoggerDelegate.errorLogger, "deleteRoleFunction failed");
428 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
429 "Failed to deleteRoleFunction for '" + code + "'", "Failed");
431 } catch (Exception e) {
432 if (e.getMessage().contains(INVALID_UEB_KEY)) {
433 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
435 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
437 logger.error(EELFLoggerDelegate.errorLogger, "deleteRoleFunction failed", e);
438 return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.getMessage(), "Failed");
440 return new PortalRestResponse<>(PortalRestStatusEnum.OK, SUCCESSFULLY_DELETED, "Success");
444 @ApiOperation(value = "Saves role for an application.", response = PortalRestResponse.class, responseContainer = "Json")
445 @RequestMapping(value = { "/role" }, method = RequestMethod.POST, produces = "application/json")
446 public PortalRestResponse<String> saveRole(HttpServletRequest request, HttpServletResponse response,
447 @RequestBody Role role) throws Exception {
449 fieldsValidation(request);
450 ExternalRequestFieldsValidator saveRoleResult = null;
451 EPUser user = externalAccessRolesService.getUser(request.getHeader(LOGIN_ID)).get(0);
452 EPApp app = externalAccessRolesService.getApp(request.getHeader(UEBKEY)).get(0);
453 if(role.getId()!=null && StringUtils.containsAny(role.getName(), ROLE_INVALID_CHARS)) {
454 throw new InvalidRoleException("Invalid role name found for '" + role.getName() + "'. Any one of the following characters '%,(),=,:,comma, and double quotes' are not allowed");
456 saveRoleResult = externalAccessRolesService.saveRoleForApplication(role, request.getHeader(UEBKEY));
457 if (saveRoleResult.isResult()) {
458 String activityCode = (role.getId() == null) ? EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_ADD_ROLE
459 : EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_UPDATE_ROLE_AND_FUNCTION;
460 logger.info(EELFLoggerDelegate.applicationLogger, "saveRole: succeeded for app {}, role {}",
461 app.getId(), role.getName());
462 AuditLog auditLog = new AuditLog();
463 auditLog.setUserId(user.getId());
464 auditLog.setActivityCode(activityCode);
465 auditLog.setComments(EcompPortalUtils.truncateString(
466 "saveRole role for app:" + app.getId() + " and role:'" + role.getName() + "'",
467 PortalConstants.AUDIT_LOG_COMMENT_SIZE));
468 auditLog.setAffectedRecordId(user.getOrgUserId());
469 auditService.logActivity(auditLog, null);
470 MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
471 MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
472 EcompPortalUtils.calculateDateTimeDifferenceForLog(
473 MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),
474 MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
475 logger.info(EELFLoggerDelegate.auditLogger,
476 EPLogUtil.formatAuditLogMessage("ExternalAccessRolesController.saveRole", activityCode,
477 String.valueOf(user.getId()), user.getOrgUserId(), role.getName()));
478 MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
479 MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
480 MDC.remove(SystemProperties.MDC_TIMER);
482 if(saveRoleResult.getDetailMessage().contains("406")){
483 response.setStatus(HttpServletResponse.SC_NOT_ACCEPTABLE);
484 return new PortalRestResponse<>(PortalRestStatusEnum.ERROR,
485 "Failed to create a role for '" + role.getName() + "'. Any one of the following characters '%,(),=,:,comma, and double quotes' are not allowed"
488 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
489 return new PortalRestResponse<>(PortalRestStatusEnum.ERROR,
490 "Failed to saveRole for '" + role.getName() + "'", "Failed");
493 } catch (Exception e) {
494 if (e.getMessage().contains(INVALID_UEB_KEY)) {
495 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
497 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
499 logger.error(EELFLoggerDelegate.errorLogger, "saveRole failed", e);
500 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, e.getMessage(), "Failed");
502 return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Successfully Saved", "Success");
505 @ApiOperation(value = "Deletes role for an application.", response = PortalRestResponse.class, responseContainer = "Json")
506 @RequestMapping(value = { "/deleteRole/{code}" }, method = RequestMethod.DELETE, produces = "application/json")
507 public PortalRestResponse<String> deleteRole(HttpServletRequest request, HttpServletResponse response,
508 @PathVariable String code) throws Exception {
510 fieldsValidation(request);
511 boolean deleteResponse = externalAccessRolesService.deleteRoleForApplication(code,
512 request.getHeader(UEBKEY));
513 if (deleteResponse) {
514 EPUser user = externalAccessRolesService.getUser(request.getHeader(LOGIN_ID)).get(0);
515 EPApp app = externalAccessRolesService.getApp(request.getHeader(UEBKEY)).get(0);
516 logger.info(EELFLoggerDelegate.applicationLogger, "deleteRole: succeeded for app {}, role {}",
518 AuditLog auditLog = new AuditLog();
519 auditLog.setUserId(user.getId());
520 auditLog.setActivityCode(EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_DELETE_ROLE);
521 auditLog.setComments(EcompPortalUtils.truncateString(
522 "Deleted role for app:" + app.getId() + " and role:'" + code + "'",
523 PortalConstants.AUDIT_LOG_COMMENT_SIZE));
524 auditLog.setAffectedRecordId(user.getOrgUserId());
525 auditService.logActivity(auditLog, null);
526 MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
527 MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP, EPEELFLoggerAdvice.getCurrentDateTimeUTC());
528 EcompPortalUtils.calculateDateTimeDifferenceForLog(
529 MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),
530 MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP));
531 logger.info(EELFLoggerDelegate.auditLogger,
532 EPLogUtil.formatAuditLogMessage("ExternalAccessRolesController.deleteRole",
533 EcompAuditLog.CD_ACTIVITY_EXTERNAL_AUTH_DELETE_ROLE, String.valueOf(user.getId()),
534 user.getOrgUserId(), code));
535 MDC.remove(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP);
536 MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP);
537 MDC.remove(SystemProperties.MDC_TIMER);
539 logger.error(EELFLoggerDelegate.errorLogger, "deleteRole failed");
540 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR,
541 "Failed to deleteRole for '" + code + "'", "Failed");
543 } catch (Exception e) {
544 if (e.getMessage().contains(INVALID_UEB_KEY)) {
545 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
547 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
549 logger.error(EELFLoggerDelegate.errorLogger, "deleteRole failed", e);
550 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, e.getMessage(), "Failed");
552 return new PortalRestResponse<String>(PortalRestStatusEnum.OK, SUCCESSFULLY_DELETED, "Success");
555 @ApiOperation(value = "Gets active roles for an application.", response = CentralV2Role.class, responseContainer = "Json")
556 @RequestMapping(value = { "/activeRoles" }, method = RequestMethod.GET, produces = "application/json")
557 public List<CentralV2Role> getActiveRoles(HttpServletRequest request, HttpServletResponse response) throws Exception {
558 List<CentralV2Role> cenRole = null;
560 fieldsValidation(request);
561 cenRole = externalAccessRolesService.getActiveRoles(request.getHeader(UEBKEY));
562 } catch (Exception e) {
563 sendErrorResponse(response, e);
564 logger.error(EELFLoggerDelegate.errorLogger, "getActiveRoles failed", e);
570 @ApiOperation(value = "deletes user roles for an application.", response = PortalRestResponse.class, responseContainer = "Json")
571 @RequestMapping(value = { "/deleteDependcyRoleRecord/{roleId}" }, method = RequestMethod.DELETE, produces = "application/json")
572 public PortalRestResponse<String> deleteDependencyRoleRecord(HttpServletRequest request, HttpServletResponse response,
573 @PathVariable("roleId") Long roleId) throws Exception {
574 ExternalRequestFieldsValidator removeResult = null;
576 fieldsValidation(request);
577 removeResult = externalAccessRolesService.deleteDependencyRoleRecord(roleId,
578 request.getHeader(UEBKEY), request.getHeader(LOGIN_ID));
579 if (!removeResult.isResult()) {
580 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
581 return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, "Failed to deleteDependencyRoleRecord",
584 } catch (Exception e) {
585 if (e.getMessage().contains(INVALID_UEB_KEY)) {
586 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
588 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
590 logger.error(EELFLoggerDelegate.errorLogger, "deleteDependencyRoleRecord failed", e);
591 return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.getMessage(), "Failed");
593 return new PortalRestResponse<>(PortalRestStatusEnum.OK, SUCCESSFULLY_DELETED, "Success");
597 @ApiOperation(value = "deletes roles for an application.", response = PortalRestResponse.class, responseContainer = "Json")
598 @RequestMapping(value = { "/v2/deleteRole/{roleId}" }, method = RequestMethod.DELETE, produces = "application/json")
599 public PortalRestResponse<String> deleteRole(HttpServletRequest request, HttpServletResponse response,
600 @PathVariable("roleId") Long roleId) throws Exception {
601 ExternalRequestFieldsValidator removeResult = null;
603 fieldsValidation(request);
604 removeResult = externalAccessRolesService.deleteDependencyRoleRecord(roleId,
605 request.getHeader(UEBKEY), request.getHeader(LOGIN_ID));
606 if (!removeResult.isResult()) {
607 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
608 return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, "Failed to deleteRole",
611 } catch (Exception e) {
612 if (e.getMessage().contains(INVALID_UEB_KEY)) {
613 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
615 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
617 logger.error(EELFLoggerDelegate.errorLogger, "deleteRole failed", e);
618 return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, e.getMessage(), "Failed");
620 return new PortalRestResponse<>(PortalRestStatusEnum.OK, SUCCESSFULLY_DELETED, "Success");
624 @ApiOperation(value = "Bulk upload functions for an application.", response = PortalRestResponse.class, responseContainer = "Json")
625 @RequestMapping(value = { "/upload/portal/functions" }, method = RequestMethod.POST, produces = "application/json")
626 public PortalRestResponse<String> bulkUploadFunctions(HttpServletRequest request, HttpServletResponse response) throws Exception {
629 result = externalAccessRolesService.bulkUploadFunctions(request.getHeader(UEBKEY));
630 } catch (Exception e) {
631 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
632 logger.error(EELFLoggerDelegate.errorLogger, "bulkUploadFunctions failed", e);
633 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "Failed to bulkUploadFunctions", "Failed");
635 return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Successfully added: "+result, "Success");
638 @ApiOperation(value = "Bulk upload roles for an application.", response = PortalRestResponse.class, responseContainer = "Json")
639 @RequestMapping(value = { "/upload/portal/roles" }, method = RequestMethod.POST, produces = "application/json")
640 public PortalRestResponse<String> bulkUploadRoles(HttpServletRequest request, HttpServletResponse response) throws Exception {
643 result = externalAccessRolesService.bulkUploadRoles(request.getHeader(UEBKEY));
644 } catch (Exception e) {
645 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
646 logger.error(EELFLoggerDelegate.errorLogger, "bulkUploadRoles failed", e);
647 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "Failed to bulkUploadRoles", "Failed");
649 return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Successfully added: "+result, "Success");
652 @ApiOperation(value = "Bulk upload role functions for an application.", response = PortalRestResponse.class, responseContainer = "Json")
653 @RequestMapping(value = { "/upload/portal/roleFunctions" }, method = RequestMethod.POST, produces = "application/json")
654 public PortalRestResponse<String> bulkUploadRoleFunctions(HttpServletRequest request, HttpServletResponse response) throws Exception {
657 result = externalAccessRolesService.bulkUploadRolesFunctions(request.getHeader(UEBKEY));
658 } catch (Exception e) {
659 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
660 logger.error(EELFLoggerDelegate.errorLogger, "bulkUploadRoleFunctions failed", e);
661 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "Failed to bulkUploadRoleFunctions", "Failed");
663 return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Successfully added: "+result, "Success");
666 @ApiOperation(value = "Bulk upload user roles for an application.", response = PortalRestResponse.class, responseContainer = "Json")
667 @RequestMapping(value = { "/upload/portal/userRoles" }, method = RequestMethod.POST, produces = "application/json")
668 public PortalRestResponse<String> bulkUploadUserRoles(HttpServletRequest request, HttpServletResponse response) throws Exception {
671 result = externalAccessRolesService.bulkUploadUserRoles(request.getHeader(UEBKEY));
672 } catch (Exception e) {
673 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
674 logger.error(EELFLoggerDelegate.errorLogger, "bulkUploadUserRoles failed", e);
675 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "Failed to bulkUploadUserRoles", "Failed");
677 return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Successfully added: "+result, "Success");
680 @ApiOperation(value = "Bulk upload users for renamed role of an application.", response = PortalRestResponse.class, responseContainer = "Json")
681 @RequestMapping(value = { "/upload/portal/userRole/{roleId}" }, method = RequestMethod.POST, produces = "application/json")
682 public PortalRestResponse<String> bulkUploadUsersSingleRole(HttpServletRequest request, HttpServletResponse response, @PathVariable Long roleId) throws Exception {
685 String roleName = request.getHeader("RoleName");
686 result = externalAccessRolesService.bulkUploadUsersSingleRole(request.getHeader(UEBKEY), roleId, roleName);
687 } catch (Exception e) {
688 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
689 logger.error(EELFLoggerDelegate.errorLogger, "bulkUploadUsersSingleRole failed", e);
690 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "Failed to bulkUploadUsersSingleRole", "Failed");
692 return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Successfully added: "+result, "Success");
695 @ApiOperation(value = "Bulk upload functions for an partner application.", response = PortalRestResponse.class, responseContainer = "Json")
696 @RequestMapping(value = { "/upload/partner/functions" }, method = RequestMethod.POST, produces = "application/json")
697 public PortalRestResponse<String> bulkUploadPartnerFunctions(HttpServletRequest request, HttpServletResponse response, @RequestBody List<RoleFunction> upload) throws Exception {
699 externalAccessRolesService.bulkUploadPartnerFunctions(request.getHeader(UEBKEY), upload);
700 } catch (Exception e) {
701 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
702 logger.error(EELFLoggerDelegate.errorLogger, "bulkUploadFunctions failed", e);
703 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "Failed to bulkUploadFunctions", "Failed");
705 return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Successfully added", "Success");
708 @ApiOperation(value = "Bulk upload roles for an partner application.", response = PortalRestResponse.class, responseContainer = "Json")
709 @RequestMapping(value = { "/upload/partner/roles" }, method = RequestMethod.POST, produces = "application/json")
710 public PortalRestResponse<String> bulkUploadPartnerRoles(HttpServletRequest request, HttpServletResponse response, @RequestBody List<Role> upload) throws Exception {
712 externalAccessRolesService.bulkUploadPartnerRoles(request.getHeader(UEBKEY), upload);
713 } catch (Exception e) {
714 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
715 logger.error(EELFLoggerDelegate.errorLogger, "bulkUploadRoles failed", e);
716 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "Failed to bulkUploadRoles", "Failed");
718 return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Successfully added", "Success");
721 @ApiOperation(value = "Bulk upload role functions for an partner application.", response = PortalRestResponse.class, responseContainer = "Json")
722 @RequestMapping(value = { "/upload/partner/roleFunctions" }, method = RequestMethod.POST, produces = "application/json")
723 public PortalRestResponse<String> bulkUploadPartnerRoleFunctions(HttpServletRequest request, HttpServletResponse response, @RequestBody List<Role> upload) throws Exception {
725 externalAccessRolesService.bulkUploadPartnerRoleFunctions(request.getHeader(UEBKEY), upload);
726 } catch (Exception e) {
727 response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
728 logger.error(EELFLoggerDelegate.errorLogger, "bulkUploadRoles failed", e);
729 return new PortalRestResponse<String>(PortalRestStatusEnum.ERROR, "Failed to bulkUploadPartnerRoleFunctions", "Failed");
731 return new PortalRestResponse<String>(PortalRestStatusEnum.OK, "Successfully added", "Success");
734 @ApiOperation(value = "Gets all functions along with global functions", response = List.class, responseContainer = "Json")
735 @RequestMapping(value = { "/menuFunctions" }, method = RequestMethod.GET, produces = "application/json")
736 public List<String> getMenuFunctions(HttpServletRequest request, HttpServletResponse response) throws Exception {
737 List<String> functionsList = null;
739 fieldsValidation(request);
740 functionsList = externalAccessRolesService.getMenuFunctionsList(request.getHeader(UEBKEY));
741 } catch (Exception e) {
742 sendErrorResponse(response, e);
743 logger.error(EELFLoggerDelegate.errorLogger, "getMenuFunctions failed", e);
745 return functionsList;
748 @ApiOperation(value = "Gets all active Users of application", response = String.class, responseContainer = "Json")
749 @RequestMapping(value = { "/users" }, method = RequestMethod.GET, produces = "application/json")
750 public List<EcompUser> getUsersOfApplication(HttpServletRequest request, HttpServletResponse response) throws Exception {
751 List<EcompUser> users = null;
753 users = externalAccessRolesService.getAllAppUsers(request.getHeader(UEBKEY));
754 } catch (Exception e) {
755 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
756 logger.error(EELFLoggerDelegate.errorLogger, "getUsersOfApplication failed", e);
757 throw new Exception(e.getMessage());
764 * It checks the input uebkey of the application and throws exception if it is invalid key
769 private void fieldsValidation(HttpServletRequest request) throws Exception{
770 List<EPApp> app = externalAccessRolesService.getApp(request.getHeader(UEBKEY));
772 throw new Exception(INVALID_UEB_KEY);
774 if(!app.isEmpty() && app.get(0).getCentralAuth()){
775 ResponseEntity<String> response = externalAccessRolesService.getNameSpaceIfExists(app.get(0));
776 if (response.getStatusCode().value() == HttpServletResponse.SC_NOT_FOUND)
777 throw new Exception("Invalid NameSpace");
783 * It returns http response with appropriate message
787 * @throws IOException
789 private void sendErrorResponse(HttpServletResponse response, Exception e) throws IOException {
790 response.setContentType("application/json");
791 response.setCharacterEncoding("UTF-8");
792 final Map<String,String> uebkeyResponse = new HashMap<>();
793 ObjectMapper mapper = new ObjectMapper();
795 if (e.getMessage().contains(INVALID_UEB_KEY)) {
796 uebkeyResponse.put("error",INVALID_UEB_KEY);
797 reason = mapper.writeValueAsString(uebkeyResponse);
798 response.getWriter().write(reason);
799 response.setStatus(HttpServletResponse.SC_NOT_FOUND);
801 uebkeyResponse.put("error",e.getMessage());
802 reason = mapper.writeValueAsString(uebkeyResponse);
803 response.getWriter().write(reason);
804 response.setStatus(HttpServletResponse.SC_BAD_REQUEST);