@Override public void createInitialUser(User user) throws EntityAlreadyExistsException, InvalidEntityException, PasswordDoesNotMeetRequirementsException { if (this.hasUsers()) { throw new RuntimeException("Illegal attempt at create the initial user"); } // Initial user does not have to validate, whatever the settings user.setActive(true); this.create(user, Role.ADMIN, Maps.<String, Object>newHashMap()); }
@Override public User map(int index, ResultSet result, StatementContext statementContext) throws SQLException { User user = new User((UUID) result.getObject("id")); user.setEmail(result.getString("email")); user.setPassword(result.getString("password")); user.setSlug(result.getString("slug")); user.setValidationKey(result.getString("validation_key")); if (result.getObject("active") != null) { user.setActive(result.getBoolean("active")); } else { user.setActive(false); } if (result.getObject("tenant_id") == null) { user.setGlobal(true); } return user; } }
@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; }
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); } }