// Copyright © 2015 HSL <https://www.hsl.fi>
// This program is dual-licensed under the EUPL v1.2 and AGPLv3 licenses.
package fi.hsl.parkandride.core.service;
import java.util.ArrayList;
import java.util.Collection;
import java.util.regex.Pattern;
import org.springframework.util.StringUtils;
import fi.hsl.parkandride.core.domain.Violation;
public class PasswordValidator {
private PasswordValidator() {}
private static final Pattern PATTERN = Pattern.compile(
"^" + // start
"(?=.*\\d)" + // at least one digit
"(?=.*[a-zåäö])" + // at least one lowercase letter
"(?=.*[A-ZÅÄÖ])" + // at least one uppercase letter
"(?!.*\\s)" + // no whitespace inside
"." + // everything provided that the previous condition checks pass
"{8,15}" + // min max length
"$" // end
);
public static void validate(String password) {
Collection<Violation> violations = new ArrayList<>();
validate(password, violations);
if (!violations.isEmpty()) {
throw new ValidationException(violations);
}
}
public static void validate(String password, Collection<Violation> violations) {
if (!StringUtils.hasText(password) || !PATTERN.matcher(password).matches()) {
violations.add(new Violation("BadPassword", "password",
"Password with length of 8-15 must contain at least one digit, one lowercase and one uppercase character"));
}
}
}