package org.apereo.cas.web.flow; import com.zaxxer.hikari.HikariDataSource; import java.io.PrintStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apereo.cas.authentication.MessageDescriptor; import org.apereo.cas.configuration.CasConfigurationProperties; import org.apereo.cas.web.landtool.Checkpass; import org.apereo.cas.web.landtool.terra.OjdbcProperties; import org.apereo.cas.web.landtool.utils.Md5Util; import org.apereo.cas.web.support.WebUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.binding.message.MessageBuilder; import org.springframework.binding.message.MessageContext; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import org.springframework.webflow.action.AbstractAction; import org.springframework.webflow.core.collection.MutableAttributeMap; import org.springframework.webflow.execution.Event; import org.springframework.webflow.execution.RequestContext; @Component("CheckAndUpdateAction") public class CheckAndUpdateAction extends AbstractAction { @Autowired private CasConfigurationProperties casProperties; @Autowired private OjdbcProperties properties; protected static void addMessageDescriptorToMessageContext(MessageContext context, MessageDescriptor warning) { MessageBuilder builder = new MessageBuilder() .warning() .code(warning.getCode()) .defaultText(warning.getDefaultMessage()) .args(warning.getParams()); context.addMessage(builder.build()); } protected Event doExecute(RequestContext requestContext) throws Exception { Checkpass cps = (Checkpass) requestContext.getFlowScope().get("checkpass"); HttpServletRequest hsr = WebUtils.getHttpServletRequest(); String userpassword = cps.getPassword(); String confirmuserpassword = cps.getConfirmedPassword(); String regex = "^.*(?=.{8,})(?=.*\\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*?.]).*$"; if (!userpassword.matches(regex)) { return new Event(this, "formaterror"); } String username = requestContext.getFlowScope().get("credential").toString(); if (userpassword.equals(confirmuserpassword)) { String finalpass = Md5Util.reverse(Md5Util.generate(userpassword)); String updatesql = String.format(this.properties.getUpdatesql(), new Object[]{finalpass, username}); int result = getJdbcTemplate().update(updatesql); if (result > 0) { if (!StringUtils.isEmpty(hsr.getParameter("service"))) { WebUtils.getHttpServletResponse().sendRedirect(hsr.getParameter("service")); } else { return new Event(this, "error"); } } else { return new Event(this, "authenticationFailure"); } } return null; } protected JdbcTemplate getJdbcTemplate() { HikariDataSource da = new HikariDataSource(); da.setJdbcUrl(this.properties.getJdbcUrl()); da.setAutoCommit(true); da.setDriverClassName(this.properties.getDriverclass()); da.setUsername(this.properties.getUsername()); da.setPassword(this.properties.getPassword()); JdbcTemplate jdbc = new JdbcTemplate(da); return jdbc; } }