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.impl.ComponentsUtils;
38 import org.openecomp.sdc.be.model.LifecycleStateEnum;
39 import org.openecomp.sdc.be.model.User;
40 import org.openecomp.sdc.be.model.operations.api.IUserAdminOperation;
41 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
42 import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
43 import org.openecomp.sdc.common.api.UserRoleEnum;
44 import org.openecomp.sdc.common.kpi.api.ASDCKpiApi;
45 import org.openecomp.sdc.exception.ResponseFormat;
46 import org.slf4j.Logger;
47 import org.slf4j.LoggerFactory;
48 import org.springframework.beans.factory.annotation.Autowired;
49 import org.springframework.stereotype.Component;
51 import fj.data.Either;
53 @Component("userBusinessLogic")
54 public class UserBusinessLogic implements IUserBusinessLogic {
56 private static final Logger log = LoggerFactory.getLogger(UserBusinessLogic.class);
57 private static UserAdminValidator userAdminValidator = UserAdminValidator.getInstance();
60 private IUserAdminOperation userAdminOperation;
62 private ComponentsUtils componentsUtils;
64 private TitanGenericDao titanDao;
67 public Either<User, ActionStatus> getUser(String userId, boolean inTransaction) {
68 return userAdminOperation.getUserData(userId, inTransaction);
72 public Either<User, ResponseFormat> createUser(User modifier, User newUser) {
74 ResponseFormat responseFormat;
75 String modifierUserId = modifier.getUserId();
77 if (modifierUserId == null) {
78 modifier.setUserId("UNKNOWN");
79 log.debug("createUser method - user header is missing");
80 responseFormat = componentsUtils.getResponseFormat(ActionStatus.MISSING_INFORMATION);
81 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.ADD_USER);
82 return Either.right(responseFormat);
85 Either<User, ActionStatus> eitherCreator = getUser(modifierUserId, false);
86 if (eitherCreator.isRight() || eitherCreator.left().value() == null) {
87 log.debug("createUser method - user is not listed. userId = {}", modifier.getUserId());
88 responseFormat = componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION);
89 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.ADD_USER);
90 return Either.right(responseFormat);
93 modifier = eitherCreator.left().value();
94 if (!modifier.getRole().equals(UserRoleEnum.ADMIN.getName())) {
95 log.debug("createUser method - user is not admin = {}", modifier.getUserId());
96 responseFormat = componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION);
97 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.ADD_USER);
98 return Either.right(responseFormat);
101 // verify user not exist
102 User userFromDb = new User();
103 Either<User, ActionStatus> eitherUserInDB = getUser(newUser.getUserId(), false);
104 if (eitherUserInDB.isRight()) {
105 ActionStatus status = eitherUserInDB.right().value();
106 if (!ActionStatus.USER_NOT_FOUND.equals(status) && !ActionStatus.USER_INACTIVE.equals(status)) {
107 responseFormat = componentsUtils.getResponseFormat(eitherUserInDB.right().value(), newUser.getUserId());
108 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.ADD_USER);
109 return Either.right(responseFormat);
111 } else {// User exist in DB
112 userFromDb = eitherUserInDB.left().value();
113 if (userFromDb.getStatus() == UserStatusEnum.ACTIVE) {
114 responseFormat = componentsUtils.getResponseFormatByUserId(ActionStatus.USER_ALREADY_EXIST, newUser.getUserId());
115 log.debug("createUser method - user with id {} already exist with id: {}", modifier.getUserId(), userFromDb.getUserId());
116 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.ADD_USER);
117 return Either.right(responseFormat);
121 newUser.setStatus(UserStatusEnum.ACTIVE);
124 if (newUser.getEmail() != null && !userAdminValidator.validateEmail(newUser.getEmail())) {
125 log.debug("createUser method - user has invalid email = {}", modifier.getUserId());
126 responseFormat = componentsUtils.getResponseFormat(ActionStatus.INVALID_EMAIL_ADDRESS, newUser.getEmail());
127 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.ADD_USER);
128 return Either.right(responseFormat);
132 if (newUser.getRole() == null || newUser.getRole().length() == 0) {
133 newUser.setRole(Role.DESIGNER.name());
135 if (!userAdminValidator.validateRole(newUser.getRole())) {
136 log.debug("createUser method - user has invalid role = {}", modifier.getUserId());
137 responseFormat = componentsUtils.getResponseFormat(ActionStatus.INVALID_ROLE, newUser.getRole());
138 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.ADD_USER);
139 return Either.right(responseFormat);
143 // handle last login if user is import
144 if (newUser.getLastLoginTime() == null) {
145 newUser.setLastLoginTime(0L);
148 Either<User, StorageOperationStatus> addOrUpdateUserReq;
150 if (ActionStatus.USER_INACTIVE.equals(eitherUserInDB.right().value())) { // user
159 newUser.setLastLoginTime(0L);
160 addOrUpdateUserReq = userAdminOperation.updateUserData(newUser);
162 } else { // user not exist - create new user
164 if (newUser.getUserId() != null && !userAdminValidator.validateUserId(newUser.getUserId())) {
165 log.debug("createUser method - user has invalid userId = {}", modifier.getUserId());
166 responseFormat = componentsUtils.getResponseFormat(ActionStatus.INVALID_USER_ID, newUser.getUserId());
167 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.ADD_USER);
168 return Either.right(responseFormat);
170 addOrUpdateUserReq = userAdminOperation.saveUserData(newUser);
173 if (addOrUpdateUserReq.isRight() || addOrUpdateUserReq.left().value() == null) {
174 log.debug("createUser method - failed to create user");
175 Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(addOrUpdateUserReq.right().value())));
177 log.debug("createUser method - user created");
178 User createdUser = addOrUpdateUserReq.left().value();
179 responseFormat = componentsUtils.getResponseFormat(ActionStatus.CREATED);
180 handleAuditing(modifier, null, createdUser, responseFormat, AuditingActionEnum.ADD_USER);
181 return Either.left(createdUser);
185 public Either<User, ResponseFormat> updateUserRole(User modifier, String userIdToUpdate, String userRole) {
187 ResponseFormat responseFormat;
188 String modifierUserId = modifier.getUserId();
190 if (modifierUserId == null) {
191 modifier.setUserId("UNKNOWN");
192 log.debug("updateUserRole method - user header is missing");
193 responseFormat = componentsUtils.getResponseFormat(ActionStatus.MISSING_INFORMATION);
194 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.UPDATE_USER);
195 return Either.right(responseFormat);
198 Either<User, ActionStatus> eitherCreator = getUser(modifierUserId, false);
199 if (eitherCreator.isRight() || eitherCreator.left().value() == null) {
200 log.debug("updateUserRole method - user is not listed. userId = {}", modifier.getUserId());
201 responseFormat = componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION);
202 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.UPDATE_USER);
203 return Either.right(responseFormat);
206 modifier = eitherCreator.left().value();
207 if (!modifier.getRole().equals(UserRoleEnum.ADMIN.getName())) {
208 log.debug("updateUserRole method - user is not admin. userId = {}", modifier.getUserId());
209 responseFormat = componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION);
210 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.UPDATE_USER);
211 return Either.right(responseFormat);
214 if (modifier.getUserId().equals(userIdToUpdate)) {
215 log.debug("updateUserRole method - admin role can only be updated by other admin. userId = {}", modifier.getUserId());
216 responseFormat = componentsUtils.getResponseFormat(ActionStatus.UPDATE_USER_ADMIN_CONFLICT);
217 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.UPDATE_USER);
218 return Either.right(responseFormat);
221 Either<User, ActionStatus> userToUpdateReq = getUser(userIdToUpdate, false);
222 if (userToUpdateReq.isRight() || userToUpdateReq.left().value() == null) {
223 log.debug("updateUserRole method - user not found. userId = {}", modifier.getUserId());
224 responseFormat = componentsUtils.getResponseFormat(ActionStatus.USER_NOT_FOUND, userIdToUpdate);
225 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.UPDATE_USER);
226 return Either.right(responseFormat);
229 if (!userAdminValidator.validateRole(userRole)) {
230 log.debug("updateUserRole method - user has invalid role = {}", modifier.getUserId());
231 responseFormat = componentsUtils.getResponseFormat(ActionStatus.INVALID_ROLE, userRole);
232 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.UPDATE_USER);
233 return Either.right(responseFormat);
236 User newUser = new User();
237 newUser.setRole(userRole);
238 newUser.setUserId(userIdToUpdate);
239 User userToUpdate = userToUpdateReq.left().value();
240 // if(!userRole.equals(UserRoleEnum.ADMIN.getName())){ //this is in
241 // comment until admin will be able to do do check-in/check-out from the
244 Either<List<Edge>, StorageOperationStatus> userPendingTasksReq = getPendingUserPendingTasksWithCommit(userToUpdate);
245 if (userPendingTasksReq.isRight()) {
246 log.debug("updateUserRole method - failed to get user pending tasks list userId {}", userIdToUpdate);
247 return Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(userPendingTasksReq.right().value())));
250 List<Edge> userPendingTasks = userPendingTasksReq.left().value();
251 if (!userPendingTasks.isEmpty()) {
252 log.debug("updateUserRole method - User canot be updated, user have pending projects userId {}", userIdToUpdate);
254 String userTasksStatusForErrorMessage = getUserPendingTaskStatusByRole(UserRoleEnum.valueOf(userToUpdate.getRole()));
255 String userInfo = userToUpdate.getFirstName() + " " + userToUpdate.getLastName() + '(' + userToUpdate.getUserId() + ')';
256 responseFormat = componentsUtils.getResponseFormat(ActionStatus.CANNOT_UPDATE_USER_WITH_ACTIVE_ELEMENTS, userInfo, userTasksStatusForErrorMessage);
257 handleAuditing(modifier, userToUpdate, userToUpdate, responseFormat, AuditingActionEnum.UPDATE_USER);
258 return Either.right(responseFormat);
261 Either<User, StorageOperationStatus> updateUserReq = userAdminOperation.updateUserData(newUser);
263 if (updateUserReq.isRight() || updateUserReq.left().value() == null) {
264 log.debug("updateUser method - failed to update user data. userId = {}", modifier.getUserId());
265 return Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(updateUserReq.right().value())));
268 responseFormat = componentsUtils.getResponseFormat(ActionStatus.OK);
269 User updatedUser = updateUserReq.left().value();
270 handleAuditing(modifier, userToUpdate, updatedUser, responseFormat, AuditingActionEnum.UPDATE_USER);
271 return Either.left(updatedUser);
275 public Either<List<User>, ResponseFormat> getAllAdminUsers(ServletContext context) {
276 Either<List<User>, ActionStatus> response = userAdminOperation.getAllUsersWithRole(Role.ADMIN.name(), null);
278 if (response.isRight()) {
279 ResponseFormat responseFormat = componentsUtils.getResponseFormat(response.right().value());
280 return Either.right(responseFormat);
282 return Either.left(response.left().value());
286 public Either<List<User>, ResponseFormat> getUsersList(String modifierAttId, List<String> roles, String rolesStr) {
287 ResponseFormat responseFormat;
288 User user = new User();
289 if (modifierAttId == null) {
290 user.setUserId("UNKNOWN");
291 responseFormat = componentsUtils.getResponseFormat(ActionStatus.MISSING_INFORMATION);
292 handleGetUsersListAuditing(user, responseFormat, rolesStr);
293 return Either.right(responseFormat);
295 Either<User, ActionStatus> userResult = getUser(modifierAttId, false);
296 if (userResult.isRight()) {
297 user.setUserId(modifierAttId);
298 if (userResult.right().value().equals(ActionStatus.USER_NOT_FOUND)) {
299 responseFormat = componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION);
301 responseFormat = componentsUtils.getResponseFormat(userResult.right().value());
303 BeEcompErrorManager.getInstance().logBeUserMissingError("Get users per roles", modifierAttId);
305 handleGetUsersListAuditing(user, responseFormat, rolesStr);
306 return Either.right(responseFormat);
308 user = userResult.left().value();
309 Either<List<User>, ResponseFormat> getResponse = null;
310 List<User> resultList = new ArrayList<>();
311 if (roles != null && !roles.isEmpty()) {
312 for (String role : roles) {
313 if (!userAdminValidator.validateRole(role)) {
314 responseFormat = componentsUtils.getResponseFormat(ActionStatus.INVALID_ROLE, role);
315 handleGetUsersListAuditing(user, responseFormat, rolesStr);
316 return Either.right(responseFormat);
318 getResponse = getUsersPerRole(role, user, rolesStr);
319 resultList.addAll(getResponse.left().value());
323 getResponse = getUsersPerRole(null, user, rolesStr);
324 resultList.addAll(getResponse.left().value());
326 responseFormat = componentsUtils.getResponseFormat(ActionStatus.OK);
327 handleGetUsersListAuditing(user, responseFormat, rolesStr);
328 return Either.left(resultList);
331 private Either<List<User>, ResponseFormat> getUsersPerRole(String role, User user, String rolesStr) {
332 ResponseFormat responseFormat;
333 Either<List<User>, ActionStatus> response = userAdminOperation.getAllUsersWithRole(role, UserStatusEnum.ACTIVE.name());
334 if (response.isRight()) {
335 responseFormat = componentsUtils.getResponseFormat(response.right().value());
336 handleGetUsersListAuditing(user, responseFormat, rolesStr);
337 return Either.right(responseFormat);
339 return Either.left(response.left().value());
342 private void handleGetUsersListAuditing(User user, ResponseFormat responseFormat, String details) {
343 componentsUtils.auditGetUsersList(AuditingActionEnum.GET_USERS_LIST, user, details, responseFormat);
346 private void handleAuditing(User modifier, User userBefor, User userAfter, ResponseFormat responseFormat, AuditingActionEnum actionName) {
347 componentsUtils.auditAdminUserAction(actionName, modifier, userBefor, userAfter, responseFormat);
350 private void handleUserAccessAuditing(User user, ResponseFormat responseFormat, AuditingActionEnum actionName) {
351 componentsUtils.auditUserAccess(actionName, user, responseFormat);
355 public Either<User, ResponseFormat> deActivateUser(User modifier, String userUniuqeIdToDeactive) {
357 ResponseFormat responseFormat;
358 String userId = modifier.getUserId();
360 if (userId == null) {
361 modifier.setUserId("UNKNOWN");
362 log.debug("deActivateUser method - user header is missing");
363 responseFormat = componentsUtils.getResponseFormat(ActionStatus.MISSING_INFORMATION);
364 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.DELETE_USER);
365 return Either.right(responseFormat);
368 Either<User, ActionStatus> eitherCreator = getUser(userId, false);
369 if (eitherCreator.isRight() || eitherCreator.left().value() == null) {
370 log.debug("deActivateUser method - user is not listed. userId = {}", modifier.getUserId());
371 responseFormat = componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION);
372 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.DELETE_USER);
373 return Either.right(responseFormat);
376 modifier = eitherCreator.left().value();
378 if (!modifier.getRole().equals(UserRoleEnum.ADMIN.getName())) {
379 log.debug("deActivateUser method - user is not admin. userId = {}", modifier.getUserId());
380 responseFormat = componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_OPERATION);
381 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.DELETE_USER);
382 return Either.right(responseFormat);
385 if (modifier.getUserId().equals(userUniuqeIdToDeactive)) {
386 log.debug("deActivateUser deActivateUser - admin can only be deactivate by other admin. userId = {}", modifier.getUserId());
387 responseFormat = componentsUtils.getResponseFormat(ActionStatus.DELETE_USER_ADMIN_CONFLICT);
388 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.DELETE_USER);
389 return Either.right(responseFormat);
392 Either<User, ActionStatus> getUserToDeleteResponse = getUser(userUniuqeIdToDeactive, false);
393 if (getUserToDeleteResponse.isRight() || getUserToDeleteResponse.left().value() == null) {
394 log.debug("deActivateUser method - failed to get user by id {}", userUniuqeIdToDeactive);
395 responseFormat = componentsUtils.getResponseFormat(ActionStatus.USER_NOT_FOUND, userUniuqeIdToDeactive);
396 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.DELETE_USER);
397 return Either.right(componentsUtils.getResponseFormat(getUserToDeleteResponse.right().value(), userUniuqeIdToDeactive));
400 User userToDeactivate = getUserToDeleteResponse.left().value();
401 if (userToDeactivate.getStatus().equals(UserStatusEnum.INACTIVE)) {
402 log.debug("deActivateUser method - User already inactive", userUniuqeIdToDeactive);
403 responseFormat = componentsUtils.getResponseFormat(ActionStatus.USER_NOT_FOUND, userUniuqeIdToDeactive);
404 handleAuditing(modifier, null, null, responseFormat, AuditingActionEnum.DELETE_USER);
405 return Either.right(responseFormat);
408 Either<List<Edge>, StorageOperationStatus> userPendingTasksReq = getPendingUserPendingTasksWithCommit(userToDeactivate);
409 if (userPendingTasksReq.isRight()) {
410 log.debug("deActivateUser method - failed to get user pending tasks list", userUniuqeIdToDeactive);
411 return Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(userPendingTasksReq.right().value())));
414 List<Edge> userPendingTasks = userPendingTasksReq.left().value();
415 if (userPendingTasks.size() > 0) {
416 log.debug("deActivateUser method - User canot be deleted, user have pending projects", userUniuqeIdToDeactive);
418 String userTasksStatusForErrorMessage = getUserPendingTaskStatusByRole(UserRoleEnum.valueOf(userToDeactivate.getRole()));
419 String userInfo = userToDeactivate.getFirstName() + " " + userToDeactivate.getLastName() + '(' + userToDeactivate.getUserId() + ')';
420 responseFormat = componentsUtils.getResponseFormat(ActionStatus.CANNOT_DELETE_USER_WITH_ACTIVE_ELEMENTS, userInfo, userTasksStatusForErrorMessage);
421 handleAuditing(modifier, userToDeactivate, userToDeactivate, responseFormat, AuditingActionEnum.DELETE_USER);
422 return Either.right(responseFormat);
425 Either<User, StorageOperationStatus> deactivateUserReq = userAdminOperation.deActivateUser(userToDeactivate);
426 if (deactivateUserReq.isRight()) {
427 log.debug("deActivateUser method - failed to deactivate user", userUniuqeIdToDeactive);
428 return Either.right(componentsUtils.getResponseFormat(componentsUtils.convertFromStorageResponse(deactivateUserReq.right().value())));
430 User deactivateUser = deactivateUserReq.left().value();
431 responseFormat = componentsUtils.getResponseFormat(ActionStatus.OK);
432 handleAuditing(modifier, userToDeactivate, null, responseFormat, AuditingActionEnum.DELETE_USER);
433 return Either.left(deactivateUser);
437 public Either<User, ResponseFormat> authorize(User authUser) {
439 ResponseFormat responseFormat;
441 String userId = authUser.getUserId();
443 if (userId == null) {
444 authUser.setUserId("UNKNOWN");
445 log.debug("deActivateUser method - user header is missing");
446 responseFormat = componentsUtils.getResponseFormat(ActionStatus.MISSING_INFORMATION);
447 handleUserAccessAuditing(authUser, responseFormat, AuditingActionEnum.USER_ACCESS);
448 return Either.right(responseFormat);
451 Either<User, ActionStatus> eitherCreator = getUser(userId, false);
452 if (eitherCreator.isRight()) {
453 if (eitherCreator.right().value() == ActionStatus.USER_NOT_FOUND || eitherCreator.right().value() == ActionStatus.USER_INACTIVE) {
454 responseFormat = componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_ACCESS);
455 handleUserAccessAuditing(authUser, responseFormat, AuditingActionEnum.USER_ACCESS);
456 return Either.right(responseFormat);
458 return Either.right(componentsUtils.getResponseFormatByUser(eitherCreator.right().value(), authUser));
461 if (eitherCreator.left().value() == null) {
462 responseFormat = componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR);
463 return Either.right(responseFormat);
467 User user = eitherCreator.left().value();
469 String firstName = authUser.getFirstName();
470 if (firstName != null && firstName.isEmpty() == false && !firstName.equals(user.getFirstName())) {
471 user.setFirstName(firstName);
474 String lastName = authUser.getLastName();
475 if (lastName != null && lastName.isEmpty() == false && !lastName.equals(user.getLastName())) {
476 user.setLastName(lastName);
479 String email = authUser.getEmail();
480 if (email != null && false == email.isEmpty() && !email.equals(user.getEmail())) {
481 user.setEmail(email);
484 // last login time stamp handle
485 user.setLastLoginTime();
487 Either<User, StorageOperationStatus> updateUserReq = userAdminOperation.updateUserData(user);
489 if (updateUserReq.isRight()) {
490 responseFormat = componentsUtils.getResponseFormatByUser(eitherCreator.right().value(), user);
491 handleUserAccessAuditing(user, responseFormat, AuditingActionEnum.USER_ACCESS);
492 return Either.right(componentsUtils.getResponseFormatByUser(eitherCreator.right().value(), user));
495 User updatedUser = updateUserReq.left().value();
497 Long lastLoginTime = user.getLastLoginTime();
498 if (lastLoginTime != null) {
499 updatedUser.setLastLoginTime(lastLoginTime);
501 updatedUser.setLastLoginTime(new Long(0));
504 responseFormat = componentsUtils.getResponseFormat(ActionStatus.OK);
505 handleUserAccessAuditing(updatedUser, responseFormat, AuditingActionEnum.USER_ACCESS);
506 ASDCKpiApi.countUsersAuthorizations();
507 return Either.left(updatedUser);
511 * The method updates user credentials only, the role is neglected The role updated through updateRole method
513 public Either<User, ResponseFormat> updateUserCredentials(User updatedUserCred) {
515 ResponseFormat responseFormat;
517 String userId = updatedUserCred.getUserId();
519 if (userId == null) {
520 updatedUserCred.setUserId("UNKNOWN");
521 log.debug("updateUserCredentials method - user header is missing");
522 responseFormat = componentsUtils.getResponseFormat(ActionStatus.MISSING_INFORMATION);
523 handleUserAccessAuditing(updatedUserCred, responseFormat, AuditingActionEnum.USER_ACCESS);
524 return Either.right(responseFormat);
527 Either<User, ActionStatus> eitherCreator = getUser(userId, false);
528 if (eitherCreator.isRight()) {
529 ActionStatus status = eitherCreator.right().value();
530 if (status == ActionStatus.USER_NOT_FOUND || status == ActionStatus.USER_INACTIVE) {
531 responseFormat = componentsUtils.getResponseFormat(ActionStatus.RESTRICTED_ACCESS);
532 handleUserAccessAuditing(updatedUserCred, responseFormat, AuditingActionEnum.USER_ACCESS);
533 return Either.right(responseFormat);
535 return Either.right(componentsUtils.getResponseFormatByUser(status, updatedUserCred));
538 if (eitherCreator.left().value() == null) {
539 responseFormat = componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR);
540 return Either.right(responseFormat);
544 User user = eitherCreator.left().value();
546 String firstName = updatedUserCred.getFirstName();
547 if (firstName != null && firstName.isEmpty() == false && !firstName.equals(user.getFirstName())) {
548 user.setFirstName(firstName);
551 String lastName = updatedUserCred.getLastName();
552 if (lastName != null && lastName.isEmpty() == false && !lastName.equals(user.getLastName())) {
553 user.setLastName(lastName);
556 String email = updatedUserCred.getEmail();
557 if (email != null && false == email.isEmpty() && !email.equals(user.getEmail())) {
558 user.setEmail(email);
561 if (updatedUserCred.getLastLoginTime() != null && user.getLastLoginTime() != null) {
562 if (updatedUserCred.getLastLoginTime() > user.getLastLoginTime()) {
563 user.setLastLoginTime(updatedUserCred.getLastLoginTime());
565 } else if (updatedUserCred.getLastLoginTime() != null && user.getLastLoginTime() == null) {
566 user.setLastLoginTime(updatedUserCred.getLastLoginTime());
569 Either<User, StorageOperationStatus> updateUserReq = userAdminOperation.updateUserData(user);
571 if (updateUserReq.isRight()) {
572 responseFormat = componentsUtils.getResponseFormatByUser(eitherCreator.right().value(), user);
573 handleUserAccessAuditing(user, responseFormat, AuditingActionEnum.USER_ACCESS);
574 return Either.right(componentsUtils.getResponseFormatByUser(eitherCreator.right().value(), user));
577 User updatedUser = updateUserReq.left().value();
579 responseFormat = componentsUtils.getResponseFormat(ActionStatus.OK);
580 handleUserAccessAuditing(updatedUser, responseFormat, AuditingActionEnum.USER_ACCESS);
581 return Either.left(updatedUser);
584 private Either<List<Edge>, StorageOperationStatus> getPendingUserPendingTasksWithCommit(User user) {
586 Either<List<Edge>, StorageOperationStatus> result = null;
589 UserRoleEnum userRole = UserRoleEnum.valueOf(user.getRole());
590 Map<String, Object> properties = new HashMap<String, Object>();
593 case PRODUCT_STRATEGIST:
594 case PRODUCT_MANAGER:
595 properties.put(GraphPropertiesDictionary.STATE.getProperty(), LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT.name());
596 return userAdminOperation.getUserPendingTasksList(user, properties);
598 properties.put(GraphPropertiesDictionary.STATE.getProperty(), LifecycleStateEnum.CERTIFICATION_IN_PROGRESS.name());
599 return userAdminOperation.getUserPendingTasksList(user, properties);
601 properties.put(GraphPropertiesDictionary.STATE.getProperty(), LifecycleStateEnum.CERTIFICATION_IN_PROGRESS.name());
602 properties.put(GraphPropertiesDictionary.STATE.getProperty(), LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT.name());
603 return userAdminOperation.getUserPendingTasksList(user, properties);
605 return Either.left(new ArrayList<>());
608 // commit will be perform outside!!!
609 if (result == null || result.isRight()) {
610 log.debug("getUserPendingTasksList failed to perform fetching");
618 private String getUserPendingTaskStatusByRole(UserRoleEnum role) {
622 case PRODUCT_STRATEGIST:
623 case PRODUCT_MANAGER:
624 return "checked-out";
627 return "in-certification";
629 return "in-certification/checked-out";