package com.diodesoftware.scb;
import com.diodesoftware.scb.tables.*;
import com.diodesoftware.scb.agents.*;
import com.diodesoftware.dbmapper.DBMapper;
import javax.servlet.http.*;
import javax.servlet.http.HttpSession;
import java.sql.Connection;
import org.apache.log4j.Logger;
/**
* Created by IntelliJ IDEA.
* User: Rob
* Date: Jun 20, 2006
* Time: 6:40:37 PM
* To change this template use File | Settings | File Templates.
*/
public class ClipSession {
private static final String CLIP_SESSION_KEY = "ClipSession";
private static Logger log = Logger.getLogger(ClipSession.class);
public static ClipSession getSession(HttpServletRequest request) {
HttpSession session = (HttpSession) request.getSession();
ClipSession result = (ClipSession) session.getAttribute(CLIP_SESSION_KEY);
if (result == null) {
result = new ClipSession();
session.setAttribute(CLIP_SESSION_KEY, result);
}
return result;
}
public static void clearSession(HttpServletRequest request) {
HttpSession session = (HttpSession) request.getSession();
session.removeAttribute(CLIP_SESSION_KEY);
}
public static void attemptLogin(HttpServletRequest request, HttpServletResponse response, Connection con) {
ClipRequest cr = new ClipRequest(request, con);
attemptLogin(cr, response, con);
}
private static boolean cookieLogin(ClipRequest request, Connection con) {
CookieAgent cookieAgent = CookieAgent.getInstance();
ClipCookie cc = cookieAgent.load(request.getRequest(), con);
if (cc == null) return false;
int userId = cc.getUserId();
DBMapper dbMapper = DBMapper.getInstance();
User user = (User) dbMapper.load(User.class, userId, con);
if (user == null) return false;
ClipSession session = getSession(request.getRequest());
session.setLoggedIn(true);
session.setUser(user);
return true;
}
public static void attemptLogin(ClipRequest request, HttpServletResponse response, Connection con) {
if (log.isDebugEnabled())
log.debug("Attempting Login");
String username = request.getParameter(HtmlParam.LOGIN_USERNAME);
String password = request.getParameter(HtmlParam.LOGIN_PASSWORD);
/*if (FileUpload.isMultipartContent(request.getRequest())) {
DiskFileUpload diskFileUpload = new DiskFileUpload();
try {
List items = diskFileUpload.parseRequest(request.getRequest());
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
request.setParameter(item.getFieldName(), item.getString());
}
}
} catch (Exception e) {
log.error("Error parsing multipart reqest",e);
}
}
request.reInitParamererMap();
*/
//request.reInitParamererMap();
if (log.isDebugEnabled())
log.debug("Attempting login with username[" + username + "] password [" + password + "]");
User user = null;
ClipSession session = getSession(request.getRequest());
if (username != null && password != null) {
session.setLoggedIn(false);
session.setUser(null);
CookieAgent.getInstance().clearCookie(request.getRequest(), response, con);
user = UserAgent.getInstance().login(username, password, con);
if(log.isDebugEnabled()){
if(user == null){
log.debug("Login for User [" + username + "] password [" + password + "] Failed");
}else{
log.debug("Login for User [" + username + "] password [" + password + "] Sucsessful");
}
}
if(username.trim().length() != 0 && password.trim().length() !=0){
request.getRequest().setAttribute("login_message", "Invalid login");
}
}
if (user == null) {
ClipCookie cc = CookieAgent.getInstance().load(request.getRequest(), con);
if (log.isDebugEnabled())
log.debug("Loaded cookie " + cc);
if (cc != null){
user = UserAgent.getInstance().load(cc.getUserId(), con);
if(user != null && user.isDisabled()){
user = null;
}
}
}
if (user != null) {
if (log.isDebugEnabled())
log.debug("Login Succressfull");
session.setLoggedIn(true);
session.setUser(user);
String cookie = request.getParameter(HtmlParam.LOGIN_COOKIE);
if (cookie != null) {
if (log.isDebugEnabled())
log.debug("Setting cookie");
CookieAgent.getInstance().create(user.getNumber(),
con,
request.getRequest(),
response);
}
} else {
if (log.isDebugEnabled())
log.debug("Login Failed");
}
if (cookieLogin(request, con)) {
if (log.isDebugEnabled())
log.debug("Cookie login sucessful, not logging in");
return;
}
}
private ClipSession() {
}
private boolean loggedIn = false;
private User user;
private String redirectURL = null;
private String lastUri = null;
private String purchaseUri = null;
public boolean isLoggedIn() {
return loggedIn;
}
public void setLoggedIn(boolean loggedIn) {
this.loggedIn = loggedIn;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public void setRedirect(String s) {
redirectURL = s;
}
public String getRedirect() {
String s = redirectURL;
redirectURL = null;
return s;
}
public String getLastUri() {
return lastUri;
}
public void setLastUri(String lastUri) {
this.lastUri = lastUri;
}
public boolean isPro() {
if (user != null && user.isPro()) return true;
return false;
}
public void reloadUser(Connection con) {
if (user != null) {
int id = user.getNumber();
user = (User) DBMapper.getInstance().load(User.class, id, con);
}
}
public String getPurchaseUri() {
return purchaseUri;
}
public void setPurchaseUri(String purchaseURI) {
this.purchaseUri = purchaseURI;
}
public String toString(){
return "LoggedIn [" + loggedIn + "] User [" + user + "] redirectURL [" + redirectURL + "] lastUri [" + lastUri + "] purchaseURI [" + purchaseUri + "]";
}
}