package uk.ac.ox.zoo.seeg.abraid.mp.publicsite.web.user.account; import org.springframework.beans.factory.annotation.Autowired; import uk.ac.ox.zoo.seeg.abraid.mp.publicsite.domain.JsonExpertDetails; import uk.ac.ox.zoo.seeg.abraid.mp.publicsite.validator.ExpertValidationRulesChecker; import java.util.ArrayList; import java.util.List; /** * Validates the fields associated with an Expert profile updates & password changes. * Copyright (c) 2014 University of Oxford */ public class AccountControllerValidator { private final ExpertValidationRulesChecker rules; @Autowired public AccountControllerValidator(ExpertValidationRulesChecker expertValidationRulesChecker) { this.rules = expertValidationRulesChecker; } /** * Validates an expert dto for the fields that can be updated in the profile details page. * @param expert The expert to validate. * @return A list of validation failures. */ public List<String> validate(JsonExpertDetails expert) { List<String> validationFailures = new ArrayList<>(); rules.checkName(expert.getName(), validationFailures); rules.checkJobTitle(expert.getJobTitle(), validationFailures); rules.checkInstitution(expert.getInstitution(), validationFailures); rules.checkVisibilityRequested(expert.getVisibilityRequested(), validationFailures); rules.checkDiseaseInterests(expert.getDiseaseInterests(), validationFailures); return validationFailures; } /** * Validates an expert's email change request. * @param email The new email address to be used. * @param password The expert's password. * @param expertId The id of the expert. * @return A list of validation failures. */ public List<String> validateEmailChange(String email, String password, int expertId) { List<String> validationFailures = new ArrayList<>(); rules.checkEmail(email, validationFailures); rules.checkCurrentPassword(password, expertId, validationFailures); return validationFailures; } /** * Validates an expert's password change request. * @param oldPassword The current password. * @param newPassword The new password. * @param confirmPassword The new password (confirmation). * @param expertId The id of the expert. * @return A list of validation failures. */ public List<String> validatePasswordChange(String oldPassword, String newPassword, String confirmPassword, int expertId) { List<String> validationFailures = new ArrayList<>(); rules.checkCurrentPassword(oldPassword, expertId, validationFailures); rules.checkPasswordConfirmation(newPassword, confirmPassword, validationFailures); rules.checkPassword(newPassword, validationFailures); return validationFailures; } /** * Validates that a new PasswordResetRequest should be issued. Checks that a expert with the specified email * address exists. * @param email The email address. * @return A list of validation failures. */ public List<String> validateNewPasswordResetRequest(String email) { List<String> validationFailures = new ArrayList<>(); rules.checkExpertExists(email, validationFailures); return validationFailures; } /** * Validates that a matching PasswordResetRequest exists. * @param id The id of the PasswordResetRequest. * @param key The key to validate. * @return A list of validation failures. */ public List<String> validatePasswordResetRequest(Integer id, String key) { List<String> validationFailures = new ArrayList<>(); rules.checkPasswordResetRequest(id, key, validationFailures); return validationFailures; } /** * Validates a password change request made via a PasswordResetRequest. * @param newPassword The new password. * @param confirmPassword The new password (confirmation). * @param id The id of the PasswordResetRequest. * @param key The key to validate. * @return A list of validation failures. */ public List<String> validatePasswordResetProcessing( String newPassword, String confirmPassword, Integer id, String key) { List<String> validationFailures = new ArrayList<>(); rules.checkPasswordResetRequest(id, key, validationFailures); rules.checkPasswordConfirmation(newPassword, confirmPassword, validationFailures); rules.checkPassword(newPassword, validationFailures); return validationFailures; } }