package er.bugtracker.components;
import com.webobjects.appserver.WOComponent;
import com.webobjects.appserver.WOContext;
import com.webobjects.appserver.WOCookie;
import com.webobjects.directtoweb.D2W;
import com.webobjects.eocontrol.EOEditingContext;
import com.webobjects.foundation.NSTimestamp;
import er.bugtracker.Factory;
import er.bugtracker.People;
import er.bugtracker.Session;
import er.extensions.crypting.ERXCrypto;
import er.extensions.foundation.ERXUtilities;
public class LoginPanel extends WOComponent {
public LoginPanel(WOContext context) {
super(context);
}
public String username;
public String password;
public boolean validated;
public boolean rememberPassword;
public String errorMessage;
private WOComponent _nextPage;
public WOComponent nextPage() {
if ((_nextPage == null) && (_nextPageCallback != null)) {
_nextPage = (WOComponent)_nextPageCallback.invoke(session());
}
return _nextPage;
}
private ERXUtilities.Callback _nextPageCallback;
public ERXUtilities.Callback nextPageCallback() { return _nextPageCallback; }
public void setNextPageCallback(ERXUtilities.Callback value) {
// delay the next page creation as long as possible because Main's constructor calls refresh which
// will do nothing if the sesion's user is null, which it will be until deep in the defaultPage action
// below.
_nextPageCallback = value;
_nextPage = null;
}
public WOComponent signUp() {
return Factory.bugTracker().signUp();
}
public WOComponent login() {
EOEditingContext editingContext;
Session session = (Session)session();
editingContext = session.defaultEditingContext();
if (!validated && false) {// captcha disabled for now
errorMessage="The captcha is wrong!";
return null;
}
if (username==null || password==null) {
errorMessage="Please specify both fields!";
return null;
}
People userObject = People.clazz.userWithUsernamePassword(editingContext, username, password);
if(userObject == null) {
errorMessage="Sorry login incorrect!";
return null;
}
if (!userObject.isActive()) {
errorMessage="Sorry your account is inactive!";
return null;
}
session.setUser(userObject);
boolean isAdmin = userObject.isAdmin();
D2W.factory().setWebAssistantEnabled(isAdmin);
String encryptedIDPrimaryKey = ERXCrypto.crypterForAlgorithm(ERXCrypto.BLOWFISH).encrypt(userObject.primaryKey());
WOCookie loginCookie=new WOCookie("BTL", rememberPassword ? encryptedIDPrimaryKey : "-");
loginCookie.setExpires(NSTimestamp.DistantFuture);
loginCookie.setPath("/");
context().response().addCookie(loginCookie);
WOComponent nextPage = nextPage();
return ((nextPage == null) ? pageWithName("HomePage") : nextPage);
}
}