package com.usemodj.forum.struts.action; import org.apache.ibatis.session.SqlSession; import org.apache.log4j.Logger; import com.usemodj.forum.Location; import com.usemodj.forum.PasswordHash; import com.usemodj.forum.domain.User; import com.usemodj.forum.service.UserService; import com.usemodj.struts.action.BaseAction; public class LoginAction extends BaseAction { /** * */ private static final long serialVersionUID = -5235472144928295365L; private static Logger logger = Logger.getLogger( LoginAction.class); UserService userService = new UserService(); User user = null; String remember = null; boolean loginAttempt = false; boolean logout = false; String url = null; public String execute() throws Exception { SqlSession sqlSession = null; User _user = null; try { this.setLocation( Location.LOGIN) ; //logout if( true == this.logout) { removeSession("user"); return "success"; } _user = (User)getSession("user"); if(null != _user) { logger.debug("-- LoginAction session user exists" ); return "login-success"; } logger.debug("-- url: "+ url); logger.debug("-- REFERER: " +request.getHeader("REFERER")); String referer = (String)getSession("REFERER"); if( null == referer) { this.url = request.getHeader("REFERER"); setSession("REFERER", this.url); } else { this.url = referer; } if( "GET".equalsIgnoreCase( request.getMethod())) return "login"; sqlSession = this.getForumSqlSessionFactory().openSession(); _user = userService.getUser( sqlSession, this.user); if( null == _user) { this.addActionError(getText("username or password is incorrect!")); return "login"; } logger.debug("--- db user userPass:" + _user.getUserPass()); if( !checkPassword(user.getUserPass(), _user.getUserPass(), _user.getId())) { addActionError( getText("username or password is incorrect!")); return "login"; } //User is logging in for the first time, update their user_status to normal if( 1== _user.getUserStatus()) updateUserStatus( sqlSession, _user.getId(), 0); removeSession("REFERER"); setSession("user", _user); } catch(Exception e){ logger.error("-- LoginAction Exception : " + e.getMessage()); } finally { if(null != sqlSession) sqlSession.close(); } return "login-success"; } private void updateUserStatus(SqlSession sqlSession, long userId, int userStatus) throws Exception { userService.updateUserStatus( sqlSession, userId, userStatus); } private boolean checkPassword(String userPass, String hashPass, long userId) { return PasswordHash.checkPassword( userPass, hashPass, userId); } //getter/ setter public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String getRemember() { return remember; } public void setRemember(String remember) { this.remember = remember; } public boolean isLogout() { return logout; } public void setLogout(boolean logout) { this.logout = logout; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public boolean isLoginAttempt() { return loginAttempt; } public void setLoginAttempt(boolean loginAttempt) { this.loginAttempt = loginAttempt; } }