/** * Tries to authenticate with given credentials * * @return User object if authentication is successful or null if not */ public User authenticate(String login, String password) { User user = userDAO.findByLogin(login); if (user == null) { return null; } if (!passwordService.checkPassword(password, user.getPasswordSalt(), user.getPasswordHash())) { user.setLoginAttempts(user.getLoginAttempts() + 1); if (user.getLoginAttempts() >= configurationService.getInt( Constants.MAX_LOGIN_ATTEMPTS, Constants.MAX_LOGIN_ATTEMPTS_DEFAULT)) { user.setStatus(UserStatus.LOCKED_OUT); } return null; } else { if (user.getLoginAttempts() != 0) { user.setLoginAttempts(0); } if (user.getLastLogin() == null || System.currentTimeMillis() - user.getLastLogin().getTime() > configurationService.getLong( Constants.LAST_LOGIN_TIMEOUT, Constants.LAST_LOGIN_TIMEOUT_DEFAULT)) { user.setLastLogin(timestampService.getTimestamp()); } return user; } }
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public List<User> getList( String login, String loginPattern, Integer role, Integer status, String sortField, Boolean sortOrderAsc, Integer take, Integer skip) { return userDAO.getList(login, loginPattern, role, status, sortField, sortOrderAsc, take, skip); }
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public User createUser(@NotNull User user, String password) { if (user.getId() != null) { throw new HiveException(Messages.ID_NOT_ALLOWED, BAD_REQUEST.getStatusCode()); } user.setLogin(StringUtils.trim(user.getLogin())); User existing = userDAO.findByLogin(user.getLogin()); if (existing != null) { throw new HiveException(Messages.DUPLICATE_LOGIN, FORBIDDEN.getStatusCode()); } if (StringUtils.isEmpty(password)) { throw new HiveException(Messages.PASSWORD_REQUIRED, BAD_REQUEST.getStatusCode()); } String salt = passwordService.generateSalt(); String hash = passwordService.hashPassword(password, salt); user.setPasswordSalt(salt); user.setPasswordHash(hash); user.setLoginAttempts(Constants.INITIAL_LOGIN_ATTEMPTS); hiveValidator.validate(user); return userDAO.create(user); }
/** * Revokes user access to given network * * @param userId id of user * @param networkId id of network */ @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public void unassignNetwork(@NotNull long userId, @NotNull long networkId) { User existingUser = userDAO.findById(userId); if (existingUser == null) { throw new HiveException( String.format(Messages.USER_NOT_FOUND, userId), NOT_FOUND.getStatusCode()); } Network existingNetwork = networkDAO.getByIdWithUsers(networkId); if (existingNetwork != null) { existingNetwork.getUsers().remove(existingUser); networkDAO.merge(existingNetwork); } }
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public User updateUser(@NotNull Long id, UserUpdate userToUpdate) { User existing = userDAO.findById(id); if (existing == null) { throw new HiveException( String.format(Messages.USER_NOT_FOUND, id), NOT_FOUND.getStatusCode()); } if (userToUpdate == null) { return existing; } if (userToUpdate.getLogin() != null) { String newLogin = StringUtils.trim(userToUpdate.getLogin().getValue()); User withSuchLogin = userDAO.findByLogin(newLogin); if (withSuchLogin != null && !withSuchLogin.getId().equals(id)) { throw new HiveException(Messages.DUPLICATE_LOGIN, FORBIDDEN.getStatusCode()); } existing.setLogin(newLogin); } if (userToUpdate.getPassword() != null) { if (StringUtils.isEmpty(userToUpdate.getPassword().getValue())) { throw new HiveException(Messages.PASSWORD_REQUIRED, BAD_REQUEST.getStatusCode()); } String salt = passwordService.generateSalt(); String hash = passwordService.hashPassword(userToUpdate.getPassword().getValue(), salt); existing.setPasswordSalt(salt); existing.setPasswordHash(hash); } if (userToUpdate.getRole() != null) { existing.setRole(userToUpdate.getRoleEnum()); } if (userToUpdate.getStatus() != null) { existing.setStatus(userToUpdate.getStatusEnum()); } hiveValidator.validate(existing); return userDAO.update(existing); }
@TransactionAttribute(TransactionAttributeType.SUPPORTS) public boolean hasAccessToNetwork(User user, Network network) { return user.isAdmin() || userDAO.hasAccessToNetwork(user, network); }
@TransactionAttribute(TransactionAttributeType.SUPPORTS) public boolean hasAccessToDevice(User user, Device device) { return user.isAdmin() || userDAO.hasAccessToDevice(user, device); }
/** * Deletes user by id. deletion is cascade * * @param id user id * @return true in case of success, false otherwise */ @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public boolean deleteUser(long id) { return userDAO.delete(id); }
/** * Retrieves user with networks by id, if there is no networks user hass access to networks will * be represented by empty set * * @param id user id * @return User model with networks, or null, if there is no such user */ @TransactionAttribute(TransactionAttributeType.SUPPORTS) public User findUserWithNetworks(@NotNull long id) { return userDAO.findUserWithNetworks(id); }
/** * Retrieves user by id (no networks fetched in this case) * * @param id user id * @return User model without networks, or null if there is no such user */ @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public User findById(@NotNull long id) { return userDAO.findById(id); }