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;
|
}
|
|
}
|