2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
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 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.be.user;
23 import java.util.ArrayList;
24 import java.util.HashMap;
25 import java.util.List;
28 import javax.annotation.Resource;
29 import javax.servlet.ServletContext;
31 import org.apache.tinkerpop.gremlin.structure.Edge;
32 import org.openecomp.sdc.be.config.BeEcompErrorManager;
33 import org.openecomp.sdc.be.dao.api.ActionStatus;
34 import org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary;
35 import org.openecomp.sdc.be.dao.titan.TitanGenericDao;
36 import org.openecomp.sdc.be.dao.utils.UserStatusEnum;
37 import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
38 import org.openecomp.sdc.be.impl.ComponentsUtils;
39 import org.openecomp.sdc.be.model.LifecycleStateEnum;
40 import org.openecomp.sdc.be.model.User;
41 import org.openecomp.sdc.be.model.operations.api.IUserAdminOperation;
42 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
43 import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
44 import org.openecomp.sdc.common.api.UserRoleEnum;
45 import org.openecomp.sdc.common.config.EcompErrorName;
46 import org.openecomp.sdc.common.kpi.api.ASDCKpiApi;
47 import org.openecomp.sdc.exception.ResponseFormat;
48 import org.slf4j.Logger;
49 import org.slf4j.LoggerFactory;
50 import org.springframework.beans.factory.annotation.Autowired;
51 import org.springframework.stereotype.Component;
53 import fj.data.Either;
55 @Component("userBusinessLogic")
56 public class UserBusinessLogic implements IUserBusinessLogic {
58 private static Logger log = LoggerFactory.getLogger(UserBusinessLogic.class.getName());
59 private static UserAdminValidator userAdminValidator = UserAdminValidator.getInstance();
62 private IUserAdminOperation userAdminOperation;
64 private ComponentsUtils componentsUtils;
66 private TitanGenericDao titanDao;
69 public Either<User, ActionStatus> getUser(String userId, boolean inTransaction) {
70 return userAdminOperation.getUserData(userId, inTransaction);
74 public Either<User, ResponseFormat> createUser(User modifier, User newUser) {
76 ResponseFormat responseFormat;
77 String modifierUserId = modifier.getUserId();
79 if (modifierUserId == null) {
80 modifier.setUserId("UNKNOWN");
81 log.debug("createUser method - user header is missing");
82 responseFormat = componentsUtils.getResponseFormat(ActionStatus.MISSING_INFORMATION);
83 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.ADD_USER);
84 return Either.right(responseFormat);
87 Either<User, ActionStatus> eitherCreator = getUser(modifierUserId, false);
88 if (eitherCreator.isRight() || eitherCreator.left().value() == null) {
89 log.debug("createUser method - user is not listed. userId = {}", modifier.getUserId());
90 responseFormat = componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION);
91 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.ADD_USER);
92 return Either.right(responseFormat);
95 modifier = eitherCreator.left().value();
96 if (!modifier.getRole().equals(UserRoleEnum.ADMIN.getName())) {
97 log.debug("createUser method - user is not admin = {}", modifier.getUserId());
98 responseFormat = componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION);
99 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.ADD_USER);
100 return Either.right(responseFormat);
103 // verify user not exist
104 User userFromDb = new User();
105 // boolean isUserAlreadyExist = false;
106 Either<User, ActionStatus> eitherUserInDB = getUser(newUser.getUserId(), false);
107 if (eitherUserInDB.isRight()) {
108 ActionStatus status = eitherUserInDB.right().value();
109 if (!ActionStatus.USER_NOT_FOUND.equals(status) && !ActionStatus.USER_INACTIVE.equals(status)) {
110 responseFormat = componentsUtils.getResponseFormat(eitherUserInDB.right().value(), newUser.getUserId());
111 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.ADD_USER);
112 return Either.right(responseFormat);
114 } else {// User exist in DB
115 userFromDb = eitherUserInDB.left().value();
116 // isUserAlreadyExist = true;
117 if (userFromDb.getStatus() == UserStatusEnum.ACTIVE) {
118 responseFormat = componentsUtils.getResponseFormatByUserId(ActionStatus.USER_ALREADY_EXIST, newUser.getUserId());
119 log.debug("createUser method - user with id {} already exist with id: {}", modifier.getUserId(), userFromDb.getUserId());
120 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.ADD_USER);
121 return Either.right(responseFormat);
125 newUser.setStatus(UserStatusEnum.ACTIVE);
128 if (newUser.getEmail() != null && !userAdminValidator.validateEmail(newUser.getEmail())) {
129 log.debug("createUser method - user has invalid email = {}", modifier.getUserId());
130 responseFormat = componentsUtils.getResponseFormat(ActionStatus.INVALID_EMAIL_ADDRESS, newUser.getEmail());
131 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.ADD_USER);
132 return Either.right(responseFormat);
136 if (newUser.getRole() == null || newUser.getRole().length() == 0) {
137 newUser.setRole(Role.DESIGNER.name());
139 if (!userAdminValidator.validateRole(newUser.getRole())) {
140 log.debug("createUser method - user has invalid role = {}", modifier.getUserId());
141 responseFormat = componentsUtils.getResponseFormat(ActionStatus.INVALID_ROLE, newUser.getRole());
142 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.ADD_USER);
143 return Either.right(responseFormat);
147 // handle last login if user is import
148 if (newUser.getLastLoginTime() == null) {
149 newUser.setLastLoginTime(0L);
152 Either<User, StorageOperationStatus> addOrUpdateUserReq;
154 if (ActionStatus.USER_INACTIVE.equals(eitherUserInDB.right().value())) { // user
163 newUser.setLastLoginTime(0L);
164 addOrUpdateUserReq = userAdminOperation.updateUserData(newUser);
166 } else { // user not exist - create new user
168 if (newUser.getUserId() != null && !userAdminValidator.validateUserId(newUser.getUserId())) {
169 log.debug("createUser method - user has invalid userId = {}", modifier.getUserId());
170 responseFormat = componentsUtils.getResponseFormat(ActionStatus.INVALID_USER_ID, newUser.getUserId());
171 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.ADD_USER);
172 return Either.right(responseFormat);
174 addOrUpdateUserReq = userAdminOperation.saveUserData(newUser);
177 if (addOrUpdateUserReq.isRight() || addOrUpdateUserReq.left().value() == null) {
178 log.debug("createUser method - failed to create user");
179 Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(addOrUpdateUserReq.right().value())));
181 log.debug("createUser method - user created");
182 User createdUser = addOrUpdateUserReq.left().value();
183 responseFormat = componentsUtils.getResponseFormat(ActionStatus.CREATED);
184 handleAuditing(modifier, null, createdUser, responseFormat, AuditingActionEnum.ADD_USER);
185 return Either.left(createdUser);
189 public Either<User, ResponseFormat> updateUserRole(User modifier, String userIdToUpdate, String userRole) {
191 ResponseFormat responseFormat;
192 String modifierUserId = modifier.getUserId();
194 if (modifierUserId == null) {
195 modifier.setUserId("UNKNOWN");
196 log.debug("updateUserRole method - user header is missing");
197 responseFormat = componentsUtils.getResponseFormat(ActionStatus.MISSING_INFORMATION);
198 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.UPDATE_USER);
199 return Either.right(responseFormat);
202 Either<User, ActionStatus> eitherCreator = getUser(modifierUserId, false);
203 if (eitherCreator.isRight() || eitherCreator.left().value() == null) {
204 log.debug("updateUserRole method - user is not listed. userId = {}", modifier.getUserId());
205 responseFormat = componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION);
206 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.UPDATE_USER);
207 return Either.right(responseFormat);
210 modifier = eitherCreator.left().value();
211 if (!modifier.getRole().equals(UserRoleEnum.ADMIN.getName())) {
212 log.debug("updateUserRole method - user is not admin. userId = {}", modifier.getUserId());
213 responseFormat = componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION);
214 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.UPDATE_USER);
215 return Either.right(responseFormat);
218 if (modifier.getUserId().equals(userIdToUpdate)) {
219 log.debug("updateUserRole method - admin role can only be updated by other admin. userId = {}", modifier.getUserId());
220 responseFormat = componentsUtils.getResponseFormat(ActionStatus.UPDATE_USER_ADMIN_CONFLICT);
221 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.UPDATE_USER);
222 return Either.right(responseFormat);
225 Either<User, ActionStatus> userToUpdateReq = getUser(userIdToUpdate, false);
226 if (userToUpdateReq.isRight() || userToUpdateReq.left().value() == null) {
227 log.debug("updateUserRole method - user not found. userId = {}", modifier.getUserId());
228 responseFormat = componentsUtils.getResponseFormat(ActionStatus.USER_NOT_FOUND, userIdToUpdate);
229 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.UPDATE_USER);
230 return Either.right(responseFormat);
233 if (!userAdminValidator.validateRole(userRole)) {
234 log.debug("updateUserRole method - user has invalid role = {}", modifier.getUserId());
235 responseFormat = componentsUtils.getResponseFormat(ActionStatus.INVALID_ROLE, userRole);
236 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.UPDATE_USER);
237 return Either.right(responseFormat);
240 User newUser = new User();
241 newUser.setRole(userRole);
242 newUser.setUserId(userIdToUpdate);
243 User userToUpdate = userToUpdateReq.left().value();
244 // if(!userRole.equals(UserRoleEnum.ADMIN.getName())){ //this is in
245 // comment until admin will be able to do do check-in/check-out from the
248 Either<List<Edge>, StorageOperationStatus> userPendingTasksReq = getPendingUserPendingTasksWithCommit(userToUpdate);
249 if (userPendingTasksReq.isRight()) {
250 log.debug("updateUserRole method - failed to get user pending tasks list userId {}", userIdToUpdate);
251 return Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(userPendingTasksReq.right().value())));
254 List<Edge> userPendingTasks = userPendingTasksReq.left().value();
255 if (!userPendingTasks.isEmpty()) {
256 log.debug("updateUserRole method - User canot be updated, user have pending projects userId {}", userIdToUpdate);
258 String userTasksStatusForErrorMessage = getUserPendingTaskStatusByRole(UserRoleEnum.valueOf(userToUpdate.getRole()));
259 String userInfo = userToUpdate.getFirstName() + " " + userToUpdate.getLastName() + '(' + userToUpdate.getUserId() + ')';
260 responseFormat = componentsUtils.getResponseFormat(ActionStatus.CANNOT_UPDATE_USER_WITH_ACTIVE_ELEMENTS, userInfo, userTasksStatusForErrorMessage);
261 handleAuditing(modifier, userToUpdate, userToUpdate, responseFormat, AuditingActionEnum.UPDATE_USER);
262 return Either.right(responseFormat);
265 Either<User, StorageOperationStatus> updateUserReq = userAdminOperation.updateUserData(newUser);
267 if (updateUserReq.isRight() || updateUserReq.left().value() == null) {
268 log.debug("updateUser method - failed to update user data. userId = {}", modifier.getUserId());
269 return Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(updateUserReq.right().value())));
272 responseFormat = componentsUtils.getResponseFormat(ActionStatus.OK);
273 User updatedUser = updateUserReq.left().value();
274 handleAuditing(modifier, userToUpdate, updatedUser, responseFormat, AuditingActionEnum.UPDATE_USER);
275 return Either.left(updatedUser);
279 public Either<List<User>, ResponseFormat> getAllAdminUsers(ServletContext context) {
280 Either<List<User>, ActionStatus> response = userAdminOperation.getAllUsersWithRole(Role.ADMIN.name(), null);
282 if (response.isRight()) {
283 ResponseFormat responseFormat = componentsUtils.getResponseFormat(response.right().value());
284 return Either.right(responseFormat);
286 return Either.left(response.left().value());
290 public Either<List<User>, ResponseFormat> getUsersList(String modifierAttId, List<String> roles, String rolesStr) {
291 ResponseFormat responseFormat;
292 User user = new User();
293 if (modifierAttId == null) {
294 user.setUserId("UNKNOWN");
295 responseFormat = componentsUtils.getResponseFormat(ActionStatus.MISSING_INFORMATION);
296 handleGetUsersListAuditing(user, responseFormat, rolesStr);
297 return Either.right(responseFormat);
299 Either<User, ActionStatus> userResult = getUser(modifierAttId, false);
300 if (userResult.isRight()) {
301 user.setUserId(modifierAttId);
302 if (userResult.right().value().equals(ActionStatus.USER_NOT_FOUND)) {
303 responseFormat = componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION);
305 responseFormat = componentsUtils.getResponseFormat(userResult.right().value());
307 BeEcompErrorManager.getInstance().processEcompError(EcompErrorName.BeUserMissingError, "Get users per roles", modifierAttId);
308 BeEcompErrorManager.getInstance().logBeUserMissingError("Get users per roles", modifierAttId);
310 handleGetUsersListAuditing(user, responseFormat, rolesStr);
311 return Either.right(responseFormat);
313 user = userResult.left().value();
314 Either<List<User>, ResponseFormat> getResponse = null;
315 List<User> resultList = new ArrayList<>();
316 if (roles != null && !roles.isEmpty()) {
317 for (String role : roles) {
318 if (!userAdminValidator.validateRole(role)) {
319 responseFormat = componentsUtils.getResponseFormat(ActionStatus.INVALID_ROLE, role);
320 handleGetUsersListAuditing(user, responseFormat, rolesStr);
321 return Either.right(responseFormat);
323 getResponse = getUsersPerRole(role, user, rolesStr);
324 resultList.addAll(getResponse.left().value());
328 getResponse = getUsersPerRole(null, user, rolesStr);
329 resultList.addAll(getResponse.left().value());
331 responseFormat = componentsUtils.getResponseFormat(ActionStatus.OK);
332 handleGetUsersListAuditing(user, responseFormat, rolesStr);
333 return Either.left(resultList);
336 private Either<List<User>, ResponseFormat> getUsersPerRole(String role, User user, String rolesStr) {
337 ResponseFormat responseFormat;
338 Either<List<User>, ActionStatus> response = userAdminOperation.getAllUsersWithRole(role, UserStatusEnum.ACTIVE.name());
339 if (response.isRight()) {
340 responseFormat = componentsUtils.getResponseFormat(response.right().value());
341 handleGetUsersListAuditing(user, responseFormat, rolesStr);
342 return Either.right(responseFormat);
344 return Either.left(response.left().value());
347 private void handleGetUsersListAuditing(User user, ResponseFormat responseFormat, String details) {
348 componentsUtils.auditGetUsersList(AuditingActionEnum.GET_USERS_LIST, user, details, responseFormat);
351 private void handleAuditing(User modifier, User userBefor, User userAfter, ResponseFormat responseFormat, AuditingActionEnum actionName) {
352 componentsUtils.auditAdminUserAction(actionName, modifier, userBefor, userAfter, responseFormat);
355 private void handleUserAccessAuditing(User user, ResponseFormat responseFormat, AuditingActionEnum actionName) {
356 componentsUtils.auditUserAccess(actionName, user, responseFormat);
360 public Either<User, ResponseFormat> deActivateUser(User modifier, String userUniuqeIdToDeactive) {
362 ResponseFormat responseFormat;
363 String userId = modifier.getUserId();
365 if (userId == null) {
366 modifier.setUserId("UNKNOWN");
367 log.debug("deActivateUser method - user header is missing");
368 responseFormat = componentsUtils.getResponseFormat(ActionStatus.MISSING_INFORMATION);
369 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.DELETE_USER);
370 return Either.right(responseFormat);
373 Either<User, ActionStatus> eitherCreator = getUser(userId, false);
374 if (eitherCreator.isRight() || eitherCreator.left().value() == null) {
375 log.debug("deActivateUser method - user is not listed. userId = {}", modifier.getUserId());
376 responseFormat = componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION);
377 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.DELETE_USER);
378 return Either.right(responseFormat);
381 modifier = eitherCreator.left().value();
383 if (!modifier.getRole().equals(UserRoleEnum.ADMIN.getName())) {
384 log.debug("deActivateUser method - user is not admin. userId = {}", modifier.getUserId());
385 responseFormat = componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION);
386 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.DELETE_USER);
387 return Either.right(responseFormat);
390 if (modifier.getUserId().equals(userUniuqeIdToDeactive)) {
391 log.debug("deActivateUser deActivateUser - admin can only be deactivate by other admin. userId = {}", modifier.getUserId());
392 responseFormat = componentsUtils.getResponseFormat(ActionStatus.DELETE_USER_ADMIN_CONFLICT);
393 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.DELETE_USER);
394 return Either.right(responseFormat);
397 Either<User, ActionStatus> getUserToDeleteResponse = getUser(userUniuqeIdToDeactive, false);
398 if (getUserToDeleteResponse.isRight() || getUserToDeleteResponse.left().value() == null) {
399 log.debug("deActivateUser method - failed to get user by id {}", userUniuqeIdToDeactive);
400 responseFormat = componentsUtils.getResponseFormat(ActionStatus.USER_NOT_FOUND, userUniuqeIdToDeactive);
401 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.DELETE_USER);
402 return Either.right(componentsUtils.getResponseFormat(getUserToDeleteResponse.right().value(), userUniuqeIdToDeactive));
405 User userToDeactivate = getUserToDeleteResponse.left().value();
406 if (userToDeactivate.getStatus().equals(UserStatusEnum.INACTIVE)) {
407 log.debug("deActivateUser method - User already inactive", userUniuqeIdToDeactive);
408 responseFormat = componentsUtils.getResponseFormat(ActionStatus.USER_NOT_FOUND, userUniuqeIdToDeactive);
409 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.DELETE_USER);
410 return Either.right(responseFormat);
413 Either<List<Edge>, StorageOperationStatus> userPendingTasksReq = getPendingUserPendingTasksWithCommit(userToDeactivate);
414 if (userPendingTasksReq.isRight()) {
415 log.debug("deActivateUser method - failed to get user pending tasks list", userUniuqeIdToDeactive);
416 return Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(userPendingTasksReq.right().value())));
419 List<Edge> userPendingTasks = userPendingTasksReq.left().value();
420 if (userPendingTasks.size() > 0) {
421 log.debug("deActivateUser method - User canot be deleted, user have pending projects", userUniuqeIdToDeactive);
423 String userTasksStatusForErrorMessage = getUserPendingTaskStatusByRole(UserRoleEnum.valueOf(userToDeactivate.getRole()));
424 String userInfo = userToDeactivate.getFirstName() + " " + userToDeactivate.getLastName() + '(' + userToDeactivate.getUserId() + ')';
425 responseFormat = componentsUtils.getResponseFormat(ActionStatus.CANNOT_DELETE_USER_WITH_ACTIVE_ELEMENTS, userInfo, userTasksStatusForErrorMessage);
426 handleAuditing(modifier, userToDeactivate, userToDeactivate, responseFormat, AuditingActionEnum.DELETE_USER);
427 return Either.right(responseFormat);
430 Either<User, StorageOperationStatus> deactivateUserReq = userAdminOperation.deActivateUser(userToDeactivate);
431 if (deactivateUserReq.isRight()) {
432 log.debug("deActivateUser method - failed to deactivate user", userUniuqeIdToDeactive);
433 return Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(deactivateUserReq.right().value())));
435 User deactivateUser = deactivateUserReq.left().value();
436 responseFormat = componentsUtils.getResponseFormat(ActionStatus.OK);
437 handleAuditing(modifier, userToDeactivate, null, responseFormat, AuditingActionEnum.DELETE_USER);
438 return Either.left(deactivateUser);
442 public Either<User, ResponseFormat> authorize(User authUser) {
444 ResponseFormat responseFormat;
446 String userId = authUser.getUserId();
448 if (userId == null) {
449 authUser.setUserId("UNKNOWN");
450 log.debug("deActivateUser method - user header is missing");
451 responseFormat = componentsUtils.getResponseFormat(ActionStatus.MISSING_INFORMATION);
452 handleUserAccessAuditing(authUser, responseFormat, AuditingActionEnum.USER_ACCESS);
453 return Either.right(responseFormat);
456 Either<User, ActionStatus> eitherCreator = getUser(userId, false);
457 if (eitherCreator.isRight()) {
458 if (eitherCreator.right().value() == ActionStatus.USER_NOT_FOUND || eitherCreator.right().value() == ActionStatus.USER_INACTIVE) {
459 responseFormat = componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_ACCESS);
460 handleUserAccessAuditing(authUser, responseFormat, AuditingActionEnum.USER_ACCESS);
461 return Either.right(responseFormat);
463 return Either.right(componentsUtils.getResponseFormatByUser(eitherCreator.right().value(), authUser));
466 if (eitherCreator.left().value() == null) {
467 responseFormat = componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR);
468 return Either.right(responseFormat);
472 User user = eitherCreator.left().value();
474 String firstName = authUser.getFirstName();
475 if (firstName != null && firstName.isEmpty() == false && !firstName.equals(user.getFirstName())) {
476 user.setFirstName(firstName);
479 String lastName = authUser.getLastName();
480 if (lastName != null && lastName.isEmpty() == false && !lastName.equals(user.getLastName())) {
481 user.setLastName(lastName);
484 String email = authUser.getEmail();
485 if (email != null && false == email.isEmpty() && !email.equals(user.getEmail())) {
486 user.setEmail(email);
489 // last login time stamp handle
490 user.setLastLoginTime();
492 Either<User, StorageOperationStatus> updateUserReq = userAdminOperation.updateUserData(user);
494 if (updateUserReq.isRight()) {
495 responseFormat = componentsUtils.getResponseFormatByUser(eitherCreator.right().value(), user);
496 handleUserAccessAuditing(user, responseFormat, AuditingActionEnum.USER_ACCESS);
497 return Either.right(componentsUtils.getResponseFormatByUser(eitherCreator.right().value(), user));
500 User updatedUser = updateUserReq.left().value();
502 Long lastLoginTime = user.getLastLoginTime();
503 if (lastLoginTime != null) {
504 updatedUser.setLastLoginTime(lastLoginTime);
506 updatedUser.setLastLoginTime(new Long(0));
509 responseFormat = componentsUtils.getResponseFormat(ActionStatus.OK);
510 handleUserAccessAuditing(updatedUser, responseFormat, AuditingActionEnum.USER_ACCESS);
511 ASDCKpiApi.countUsersAuthorizations();
512 return Either.left(updatedUser);
516 * The method updates user credentials only, the role is neglected The role updated through updateRole method
518 public Either<User, ResponseFormat> updateUserCredentials(User updatedUserCred) {
520 ResponseFormat responseFormat;
522 String userId = updatedUserCred.getUserId();
524 if (userId == null) {
525 updatedUserCred.setUserId("UNKNOWN");
526 log.debug("updateUserCredentials method - user header is missing");
527 responseFormat = componentsUtils.getResponseFormat(ActionStatus.MISSING_INFORMATION);
528 handleUserAccessAuditing(updatedUserCred, responseFormat, AuditingActionEnum.USER_ACCESS);
529 return Either.right(responseFormat);
532 Either<User, ActionStatus> eitherCreator = getUser(userId, false);
533 if (eitherCreator.isRight()) {
534 ActionStatus status = eitherCreator.right().value();
535 if (status == ActionStatus.USER_NOT_FOUND || status == ActionStatus.USER_INACTIVE) {
536 responseFormat = componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_ACCESS);
537 handleUserAccessAuditing(updatedUserCred, responseFormat, AuditingActionEnum.USER_ACCESS);
538 return Either.right(responseFormat);
540 return Either.right(componentsUtils.getResponseFormatByUser(status, updatedUserCred));
543 if (eitherCreator.left().value() == null) {
544 responseFormat = componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR);
545 return Either.right(responseFormat);
549 User user = eitherCreator.left().value();
551 String firstName = updatedUserCred.getFirstName();
552 if (firstName != null && firstName.isEmpty() == false && !firstName.equals(user.getFirstName())) {
553 user.setFirstName(firstName);
556 String lastName = updatedUserCred.getLastName();
557 if (lastName != null && lastName.isEmpty() == false && !lastName.equals(user.getLastName())) {
558 user.setLastName(lastName);
561 String email = updatedUserCred.getEmail();
562 if (email != null && false == email.isEmpty() && !email.equals(user.getEmail())) {
563 user.setEmail(email);
566 if (updatedUserCred.getLastLoginTime() != null && user.getLastLoginTime() != null) {
567 if (updatedUserCred.getLastLoginTime() > user.getLastLoginTime()) {
568 user.setLastLoginTime(updatedUserCred.getLastLoginTime());
570 } else if (updatedUserCred.getLastLoginTime() != null && user.getLastLoginTime() == null) {
571 user.setLastLoginTime(updatedUserCred.getLastLoginTime());
574 Either<User, StorageOperationStatus> updateUserReq = userAdminOperation.updateUserData(user);
576 if (updateUserReq.isRight()) {
577 responseFormat = componentsUtils.getResponseFormatByUser(eitherCreator.right().value(), user);
578 handleUserAccessAuditing(user, responseFormat, AuditingActionEnum.USER_ACCESS);
579 return Either.right(componentsUtils.getResponseFormatByUser(eitherCreator.right().value(), user));
582 User updatedUser = updateUserReq.left().value();
584 responseFormat = componentsUtils.getResponseFormat(ActionStatus.OK);
585 handleUserAccessAuditing(updatedUser, responseFormat, AuditingActionEnum.USER_ACCESS);
586 return Either.left(updatedUser);
589 private Either<List<Edge>, StorageOperationStatus> getPendingUserPendingTasksWithCommit(User user) {
591 Either<List<Edge>, StorageOperationStatus> result = null;
594 UserRoleEnum userRole = UserRoleEnum.valueOf(user.getRole());
595 Map<String, Object> properties = new HashMap<String, Object>();
598 case PRODUCT_STRATEGIST:
599 case PRODUCT_MANAGER:
600 properties.put(GraphPropertiesDictionary.STATE.getProperty(), LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT.name());
601 return userAdminOperation.getUserPendingTasksList(user, properties);
603 properties.put(GraphPropertiesDictionary.STATE.getProperty(), LifecycleStateEnum.CERTIFICATION_IN_PROGRESS.name());
604 return userAdminOperation.getUserPendingTasksList(user, properties);
606 properties.put(GraphPropertiesDictionary.STATE.getProperty(), LifecycleStateEnum.CERTIFICATION_IN_PROGRESS.name());
607 properties.put(GraphPropertiesDictionary.STATE.getProperty(), LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT.name());
608 return userAdminOperation.getUserPendingTasksList(user, properties);
610 return Either.left(new ArrayList<>());
613 // commit will be perform outside!!!
614 if (result == null || result.isRight()) {
615 log.debug("getUserPendingTasksList failed to perform fetching");
623 private String getUserPendingTaskStatusByRole(UserRoleEnum role) {
627 case PRODUCT_STRATEGIST:
628 case PRODUCT_MANAGER:
629 return "checked-out";
632 return "in-certification";
634 return "in-certification/checked-out";