@Override public List<Role> findRolesForUser(User user) { return this.userStore.get().findRolesForUser(user); }
@Override public User findUserByEmailOrUserName(String userNameOrEmail) { return this.userStore.get().findUserByEmailOrUserName(userNameOrEmail); }
@Override public boolean hasUsers() { return this.userStore.get().findAll(1, 0).size() > 0; }
@Override public void createPasswordResetRequest(String emailOrUsername) throws UserNotFoundException { Preconditions.checkNotNull(emailOrUsername); User user = this.userStore.get().findUserByEmailOrUserName(emailOrUsername); if (user == null) { throw new UserNotFoundException("No user found with this email or usernmae"); } AccountsSettings settings = getSettings(); final String secret = generateSecret(); this.userStore.get().createPasswordResetRequest(user, secret); sendPasswordResetMail(user, secret, settings); }
@Override public void resetPassword(String resetKey, String password) throws NoSuchPasswordResetKeyException, PasswordDoesNotMeetRequirementsException { Preconditions.checkNotNull(resetKey); Preconditions.checkNotNull(password); User user = this.userStore.get().findUserByPasswordResetRequest(resetKey); if (user == null) { throw new NoSuchPasswordResetKeyException(); } AccountsSettings settings = getSettings(); if (password.length() < settings.getPasswordRequirements().getMinimalLength()) { throw new PasswordDoesNotMeetRequirementsException("Provided password does not meet requirements"); } this.userStore.get().updatePassword(user, passwordManager.hashPassword(password)); this.userStore.get().deletePasswordResetRequest(resetKey); }
@Override public User validateAccount(String validationKey) throws NoSuchValidationKeyException, IncompatibleConnectedUserException, UserAlreadyValidatedException { User user = this.userStore.get().findByValidationKey(validationKey); if (user == null) { throw new NoSuchValidationKeyException("Validation key does not exist"); } if (context.getUser() != null && !context.getUser().getId().equals(user.getId())) { throw new IncompatibleConnectedUserException("Refusing to validate user not matching connected user"); } if (user.isActive()) { throw new UserAlreadyValidatedException("User already validated"); } user.setActive(true); try { this.userStore.get().update(user); } catch (InvalidEntityException | EntityDoesNotExistException e) { this.logger.error("Failed to validate user", e); throw new RuntimeException(e); } return user; }
@Override public void changePassword(User user, String currentPassword, String newPassword) throws WrongPasswordException, PasswordDoesNotMeetRequirementsException { Preconditions.checkNotNull(user); Preconditions.checkNotNull(user.getId()); User stored = this.userStore.get().findById(user.getId()); if (!this.passwordManager.verifyPassword(currentPassword, stored.getPassword())) { throw new WrongPasswordException("Refusing to change password : given current password is incorrect"); } if (!passwordStrengthChecker.checkLength(newPassword)) { throw new PasswordDoesNotMeetRequirementsException( "Provided password does not meet requirements : length too short"); } if (!passwordStrengthChecker.checkEntropy(newPassword)) { throw new PasswordDoesNotMeetRequirementsException( "Provided password does not meet requirements : not enough bits of entropy"); } this.userStore.get().updatePassword(user, passwordManager.hashPassword(newPassword)); }
private void create(User user, Role initialRole, Map<String, Object> additionalContext) throws InvalidEntityException, EntityAlreadyExistsException, PasswordDoesNotMeetRequirementsException { AccountsSettings settings = getSettings(); Boolean validationIsRequired = settings.getUserValidation().getValue(); if (user.getPassword().length() < settings.getPasswordRequirements().getMinimalLength()) { throw new PasswordDoesNotMeetRequirementsException("Provided password does not meet requirements"); } if (validationIsRequired) { if (context.getTenant() != null) { throw new RuntimeException("Validation is not supported for local users"); } user.setActive(false); user.setValidationKey(generateSecret()); } else { user.setActive(true); } user.setPassword(this.passwordManager.hashPassword(user.getPassword())); final User createdUser = this.userStore.get().create(user, initialRole); if (validationIsRequired) { sendValidationMail(createdUser, settings, additionalContext); } }
@Override public Optional<User> verify(String value, Tenant tenant) { final int space = value.indexOf(' '); if (space > 0) { final String decoded = B64Code.decode(value.substring(space + 1), StringUtil.__ISO_8859_1); final int i = decoded.indexOf(':'); if (i > 0) { final String username = decoded.substring(0, i); final String password = decoded.substring(i + 1); User user = userStore.get().findUserByEmailOrUserName(username); if (user != null) { if (this.passwordManager.verifyPassword(password, user.getPassword())) { return Optional.of(user); } } } } return Optional.absent(); } }
@Override public boolean userHasRole(User user, Role role) { List<Role> roles = userStore.get().findRolesForUser(user); for (Role userRole : roles) { if (role.equals(userRole)) { return true; } } return false; } }
User user = userStore.get().findUserByEmailOrUserName(username); if (user != null) { if (this.passwordManager.verifyPassword(password, user.getPassword())) {