package org.apereo.cas.configuration.model.support.pm; import org.apereo.cas.configuration.model.core.authentication.PasswordEncoderProperties; import org.apereo.cas.configuration.model.core.ticket.SigningEncryptionProperties; import org.apereo.cas.configuration.model.support.jpa.AbstractJpaProperties; import org.apereo.cas.configuration.model.support.ldap.AbstractLdapProperties; import org.springframework.boot.context.properties.NestedConfigurationProperty; import java.util.LinkedHashMap; import java.util.Map; /** * This is {@link PasswordManagementProperties}. * * @author Misagh Moayyed * @since 5.0.0 */ public class PasswordManagementProperties { private boolean enabled; // Minimum 8 and Maximum 10 characters at least 1 Uppercase Alphabet, 1 Lowercase Alphabet, 1 Number and 1 Special Character private String policyPattern = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@$!%*?&])[A-Za-z\\d$@$!%*?&]{8,10}"; private Ldap ldap = new Ldap(); private Jdbc jdbc = new Jdbc(); private Rest rest = new Rest(); private Reset reset = new Reset(); public Reset getReset() { return reset; } public void setReset(final Reset reset) { this.reset = reset; } public boolean isEnabled() { return enabled; } public void setEnabled(final boolean enabled) { this.enabled = enabled; } public String getPolicyPattern() { return policyPattern; } public void setPolicyPattern(final String policyPattern) { this.policyPattern = policyPattern; } public Rest getRest() { return rest; } public void setRest(final Rest rest) { this.rest = rest; } public Jdbc getJdbc() { return jdbc; } public void setJdbc(final Jdbc jdbc) { this.jdbc = jdbc; } public Ldap getLdap() { return ldap; } public void setLdap(final Ldap ldap) { this.ldap = ldap; } public static class Jdbc extends AbstractJpaProperties { @NestedConfigurationProperty private PasswordEncoderProperties passwordEncoder = new PasswordEncoderProperties(); private String sqlChangePassword; private String sqlFindEmail; private String sqlSecurityQuestions; public String getSqlChangePassword() { return sqlChangePassword; } public void setSqlChangePassword(final String sqlChangePassword) { this.sqlChangePassword = sqlChangePassword; } public String getSqlFindEmail() { return sqlFindEmail; } public void setSqlFindEmail(final String sqlFindEmail) { this.sqlFindEmail = sqlFindEmail; } public String getSqlSecurityQuestions() { return sqlSecurityQuestions; } public void setSqlSecurityQuestions(final String sqlSecurityQuestions) { this.sqlSecurityQuestions = sqlSecurityQuestions; } public PasswordEncoderProperties getPasswordEncoder() { return passwordEncoder; } public void setPasswordEncoder(final PasswordEncoderProperties passwordEncoder) { this.passwordEncoder = passwordEncoder; } } public static class Rest { private String endpointUrlEmail; private String endpointUrlSecurityQuestions; private String endpointUrlChange; public String getEndpointUrlEmail() { return endpointUrlEmail; } public void setEndpointUrlEmail(final String endpointUrlEmail) { this.endpointUrlEmail = endpointUrlEmail; } public String getEndpointUrlSecurityQuestions() { return endpointUrlSecurityQuestions; } public void setEndpointUrlSecurityQuestions(final String endpointUrlSecurityQuestions) { this.endpointUrlSecurityQuestions = endpointUrlSecurityQuestions; } public String getEndpointUrlChange() { return endpointUrlChange; } public void setEndpointUrlChange(final String endpointUrlChange) { this.endpointUrlChange = endpointUrlChange; } } public static class Ldap extends AbstractLdapProperties { private Map<String, String> securityQuestionsAttributes = new LinkedHashMap<>(); private String baseDn; private String userFilter; private LdapType type = LdapType.AD; public Map<String, String> getSecurityQuestionsAttributes() { return securityQuestionsAttributes; } public void setSecurityQuestionsAttributes(final Map<String, String> s) { this.securityQuestionsAttributes = s; } public String getBaseDn() { return baseDn; } public void setBaseDn(final String baseDn) { this.baseDn = baseDn; } public String getUserFilter() { return userFilter; } public void setUserFilter(final String userFilter) { this.userFilter = userFilter; } public LdapType getType() { return type; } public void setType(final LdapType type) { this.type = type; } } public static class Reset { @NestedConfigurationProperty private SigningEncryptionProperties security = new SigningEncryptionProperties(); private String text = "Reset your password via this link: %s"; private String subject = "Password Reset"; private String from; private String emailAttribute = "mail"; private boolean securityQuestionsEnabled = true; private float expirationMinutes = 1; public Reset() { security.setCipherEnabled(true); } public SigningEncryptionProperties getSecurity() { return security; } public String getEmailAttribute() { return emailAttribute; } public void setEmailAttribute(final String emailAttribute) { this.emailAttribute = emailAttribute; } public void setSecurity(final SigningEncryptionProperties security) { this.security = security; } public String getText() { return text; } public void setText(final String text) { this.text = text; } public String getSubject() { return subject; } public void setSubject(final String subject) { this.subject = subject; } public String getFrom() { return from; } public void setFrom(final String from) { this.from = from; } public float getExpirationMinutes() { return expirationMinutes; } public void setExpirationMinutes(final float expirationMinutes) { this.expirationMinutes = expirationMinutes; } public boolean isSecurityQuestionsEnabled() { return securityQuestionsEnabled; } public void setSecurityQuestionsEnabled(final boolean securityQuestionsEnabled) { this.securityQuestionsEnabled = securityQuestionsEnabled; } } }