package fr.openwide.core.basicapp.core.security.model; import java.io.Serializable; import java.util.Collections; import java.util.Set; import org.passay.Rule; import com.google.common.collect.Sets; import fr.openwide.core.basicapp.core.business.user.model.User; import fr.openwide.core.commons.util.collections.CollectionUtils; import fr.openwide.core.jpa.security.password.rule.SecurityPasswordRulesBuilder; public class SecurityOptions implements Serializable { private static final long serialVersionUID = -1091828713116815464L; private SecurityOptionsMode passwordExpiration = SecurityOptionsMode.DISABLED; private SecurityOptionsMode passwordHistory = SecurityOptionsMode.DISABLED; private SecurityOptionsMode passwordUserUpdate = SecurityOptionsMode.DISABLED; private SecurityOptionsMode passwordAdminUpdate = SecurityOptionsMode.DISABLED; private SecurityOptionsMode passwordUserRecovery = SecurityOptionsMode.DISABLED; private SecurityOptionsMode passwordAdminRecovery = SecurityOptionsMode.DISABLED; private Set<Rule> passwordRules = Sets.newHashSet(); public static final SecurityOptions DEFAULT = new SecurityOptions() .passwordAdminRecovery() .passwordUserRecovery() .passwordAdminUpdate() .passwordUserUpdate() .passwordRules( SecurityPasswordRulesBuilder.start() .minMaxLength(User.MIN_PASSWORD_LENGTH, User.MAX_PASSWORD_LENGTH) .build() ); public SecurityOptions passwordExpiration() { passwordExpiration = SecurityOptionsMode.ENABLED; return this; } public SecurityOptionsMode getPasswordExpiration() { return passwordExpiration; } public boolean isPasswordExpirationEnabled() { return SecurityOptionsMode.ENABLED.equals(getPasswordExpiration()); } public SecurityOptions passwordHistory() { passwordHistory = SecurityOptionsMode.ENABLED; return this; } public SecurityOptionsMode getPasswordHistory() { return passwordHistory; } public boolean isPasswordHistoryEnabled() { return SecurityOptionsMode.ENABLED.equals(getPasswordHistory()); } public SecurityOptions passwordUserUpdate() { passwordUserUpdate = SecurityOptionsMode.ENABLED; return this; } public SecurityOptionsMode getPasswordUserUpdate() { return passwordUserUpdate; } public boolean isPasswordUserUpdateEnabled() { return SecurityOptionsMode.ENABLED.equals(getPasswordUserUpdate()); } public SecurityOptions passwordAdminUpdate() { passwordAdminUpdate = SecurityOptionsMode.ENABLED; return this; } public SecurityOptionsMode getPasswordAdminUpdate() { return passwordAdminUpdate; } public boolean isPasswordAdminUpdateEnabled() { return SecurityOptionsMode.ENABLED.equals(getPasswordAdminUpdate()) || SecurityOptionsMode.DISABLED.equals(getPasswordUserRecovery()); } public SecurityOptions passwordUserRecovery() { passwordUserRecovery = SecurityOptionsMode.ENABLED; return this; } public SecurityOptionsMode getPasswordUserRecovery() { return passwordUserRecovery; } public boolean isPasswordUserRecoveryEnabled() { return SecurityOptionsMode.ENABLED.equals(getPasswordUserRecovery()); } public SecurityOptions passwordAdminRecovery() { passwordAdminRecovery = SecurityOptionsMode.ENABLED; return this; } public SecurityOptionsMode getPasswordAdminRecovery() { return passwordAdminRecovery; } public boolean isPasswordAdminRecoveryEnabled() { return SecurityOptionsMode.ENABLED.equals(getPasswordAdminRecovery()); } public SecurityOptions passwordRules(Set<Rule> passwordRules) { CollectionUtils.replaceAll(this.passwordRules, passwordRules); return this; } public Set<Rule> getPasswordRules() { return Collections.unmodifiableSet(passwordRules); } private enum SecurityOptionsMode { ENABLED, DISABLED; } }