package com.netsyncro.wicketmail;
import com.netsyncro.wicketmail.business.LoginDataBean;
import com.netsyncro.wicketmail.business.MailboxConnection;
import com.netsyncro.wicketmail.business.db.AuthorizedRole;
import com.netsyncro.wicketmail.business.db.AuthorizedRolesDao;
import com.netsyncro.wicketmail.business.javamail.JavamailConnection;
import com.netsyncro.wicketmail.business.misc.AccessDeniedException;
import com.netsyncro.wicketmail.business.misc.ConnectionEstablishException;
import com.netsyncro.wicketmail.business.stub.StubMailboxConnection;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.wicket.Request;
import org.apache.wicket.Session;
import org.apache.wicket.Application;
import org.apache.wicket.injection.web.InjectorHolder;
import org.apache.wicket.protocol.http.WebSession;
import org.apache.wicket.spring.injection.annot.SpringBean;
import java.security.DigestException;
import java.security.NoSuchAlgorithmException;
/**
* Session.
*/
public class WicketmailSession extends WebSession {
private static final Log log = LogFactory.getLog(WicketmailSession.class);
// TODO : Dima just take a look that this is the best route to go for now
private String user;
private MailboxConnection mailboxConnection;
public static WicketmailSession get() {
return (WicketmailSession) Session.get();
}
public WicketmailSession(final Request request) {
super(request);
// NOTE : This is my attempt, but tosses a 500 error..
// which points to me needing to create an injector. bla bla.
// maybe we want to use google guice injector for this?
// See AbstractDao for an example
InjectorHolder.getInjector().inject(this);
}
// TODO : Replace this. Old way that works
/*
public WicketmailSession(Application application, Request request) {
super(application, request);
InjectorHolder.getInjector().inject(this);
}
*/
public MailboxConnection getMailboxConnection() {
if (mailboxConnection == null) {
mailboxConnection = new StubMailboxConnection();
}
return mailboxConnection;
}
public void login(final LoginDataBean loginDataBean) throws ConnectionEstablishException, AccessDeniedException {
mailboxConnection = new JavamailConnection();
mailboxConnection.login(loginDataBean);
}
public boolean isUserLoggedIn() {
return mailboxConnection != null;
}
public void logout() {
mailboxConnection.logout();
mailboxConnection = null;
}
@SpringBean(name = "authorizedRolesDao")
private AuthorizedRolesDao dao;
public final boolean authenticate(final String username, final String password) throws DigestException, NoSuchAlgorithmException {
if (user == null || (null != username && null != password)) {
if (dao != null) {
AuthorizedRole authorizedroles = dao.retrieve(username, password);
if (authorizedroles.getRoleID() != 0) {
user = username;
}
}
}
return user != null;
}
}