package net.unicon.cas.addons.authentication; import org.jasig.cas.authentication.principal.Principal; import org.jasig.cas.authentication.principal.UsernamePasswordCredentials; import java.util.Map; /** * A strategy interface for determining a password expiration status based on the provided credentials, principal or principal's attributes. * * @author Dmitriy Kopylenko * @author Unicon, inc. */ public interface PasswordExpirationStatusPolicy { /** * Returns password status * @param principal * @return PasswordStatus based on provided authenticated principal * @throws RuntimeException */ PasswordStatus computePasswordExpirationStatus(Principal principal) throws RuntimeException; /** * Returns password status * @param principalAttributes * @return PasswordStatus based on provided authenticated principal's attributes * @throws RuntimeException */ PasswordStatus computePasswordExpirationStatus(Map<String, Object> principalAttributes) throws RuntimeException; /** * Returns password status * @param credentials * @return PasswordStatus based on provided user's credentials * @throws RuntimeException */ PasswordStatus computePasswordExpirationStatus(UsernamePasswordCredentials credentials) throws RuntimeException; enum PasswordStatus { VALID, ABOUT_TO_EXPIRE, EXPIRED, CHANGED_BY_ADMINISTRATOR, OTHER, UNDETERMINED; private int daysBeforeExpiration; public int getDaysBeforeExpiration() { return this.daysBeforeExpiration; } public PasswordStatus withDaysBeforeExpiration(int daysBeforeExpiration) { this.daysBeforeExpiration = daysBeforeExpiration; return this; } }; }