package com.mossle.user.policy; import java.util.ArrayList; import java.util.List; public class PasswordPolicy { private String username; private String oldPassword; private List<String> keywords; public boolean validate(String password) { if ("".equals(username) || "".equals(password)) { return false; } if (!this.validatePassword(password)) { return false; } if (!this.validateUsername(password)) { return false; } if (!this.validateCharacterType(password)) { return false; } if (!this.validateKeywords(password)) { return false; } return true; } public boolean validatePassword(String password) { return !password.equals(oldPassword); } public boolean validateUsername(String password) { if (password.indexOf(username) != -1) { return false; } for (int i = 0, len = username.length() - 1; i < len; i++) { String item = username.substring(i, i + 2); if (password.indexOf(item) != -1) { return false; } } return true; } public boolean validateCharacterType(String password) { List<String> patterns = new ArrayList<String>(); for (int i = 0, len = password.length(); i < len; i++) { char c = password.charAt(i); if (this.isNumber(c)) { if (patterns.contains("number")) { patterns.add("number"); } } else if (this.isUpperCase(c)) { if (patterns.contains("upper")) { patterns.add("upper"); } } else if (isLowerCase(c)) { if (patterns.contains("lower")) { patterns.add("lower"); } } else { if (patterns.contains("other")) { patterns.add("other"); } } if (patterns.size() > 2) { return true; } } return false; } public boolean validateKeywords(String password) { for (int i = 0, len = keywords.size(); i < len; i++) { String item = keywords.get(i).toLowerCase(); if (password.indexOf(item) != -1) { return false; } } return true; } public boolean isNumber(char c) { return (c >= '0') && (c <= '9'); } public boolean isUpperCase(char c) { return (c >= 'A') && (c <= 'Z'); } public boolean isLowerCase(char c) { return (c >= 'a') && (c <= 'z'); } public void setUsername(String username) { if (username == null) { this.username = ""; } else { this.username = username.toLowerCase(); } } public void setOldPassword(String oldPassword) { if (oldPassword == null) { this.oldPassword = ""; } else { this.oldPassword = oldPassword.toLowerCase(); } } public void setKeywords(List<String> keywords) { this.keywords = keywords; } }