package page.tools.admin;
import java.io.IOException;
import org.wikiwebserver.core.Privilege;
import org.wikiwebserver.core.WareHouse;
import org.wikiwebserver.handler.http.FormData;
import org.wikiwebserver.handler.http.HTTPHandler;
import org.wikiwebserver.handler.http.interfaces.HTTPResponder;
import page.tools.entity.Browser;
import page.tools.entity.User;
import static org.wikiwebserver.html.HTMLHelper.*;
public class QuickSignIn implements HTTPResponder {
// This form will feature on all pages, must not conflict with other forms
private String formUnique = "QSI";
public Object respond(HTTPHandler conn) throws IOException {
String error = null;
String email = null;
String password = null;
String emailClass = "email";
String passwordClass = "password";
String cookieImplants = null;
String rl = conn.getRequest().getUrl();
FormData formData = conn.getRequest().getFormData();
if (formData != null) {
String action = formData.getFirst(formUnique + "action");
email = formData.getFirst(formUnique + "email");
password = formData.getFirst(formUnique + "password");
if (action == null) {
// Ignore
}
else if (action.equals("Reset")) {
String userID = formData.getFirst(formUnique + "userID");
User user = User.getUserById(userID);
if (user != null) {
user.resetPassword(conn);
error = "Check email for new temporary password";
}
}
else if (action.equals("Sign in")) {
User user = User.getUserByEmail(email);
if (user == null) {
emailClass += "Error";
String register = WareHouse.getUrlPathForClass(UserProfile.class) +
"?completetarget=" + conn.getRequest().getUrl();
error = "Account not found. " +
a(register, "Register a new user account") + ".";
}
else if (!user.isCorrectPassword(password)) {
passwordClass += "Error";
String tempPasswordLink = rl + "?" + formUnique + "action=" + "Reset" +
"&" + formUnique + "userID=" + user.getId();
error = "Incorrect password. " +
a(tempPasswordLink, "Email a new one") +
" to " + email + ".";
}
else {
user.startSession(password, conn);
cookieImplants = implantCookie(user, "http://www.wikiwebserver.org", "Signed into WikiWebServer") +
implantCookie(user, "http://www.googleoids.com", "Signed into Googleoids") +
implantCookie(user, "http://www.jfilerecovery.com", "Signed into JFileRecovery");
}
// This was a sign in attempt, remove form data
conn.getRequest().getFormData().clear();
}
else if (action.equals("Sign out")) {
User user = User.getUser(conn.getRequest());
user.endSession(conn.getRequest(), conn.getResponse());
// This was a sign out attempt, remove form data
conn.getRequest().getFormData().clear();
}
}
StringBuilder form = new StringBuilder();
User currentUser = null;
try {
currentUser = User.getUser(conn.getRequest());
} catch (SecurityException ex) { /* Occurs if session bad */ }
if (currentUser == null) {
String userID = conn.getRequest().getHeaders().getRequestCookies().get("userID");
if (email == null) email = "guest@wikiwebserver.org";
if (password == null) password = "********";
if (userID != null) {
User u = User.getUserById(userID);
if (u != null) {
email = u.getEmail();
password = "";
}
}
form.append(textfield(formUnique+"email", email, "onfocus='this.select();' class='" + emailClass + "'"));
form.append(textfield(formUnique+"password", password, "onfocus='this.select();' class='" + passwordClass + "'"));
form.append(submitbutton(formUnique + "action", "Sign in"));
}
else {
if (cookieImplants != null) {
form.append(cookieImplants);
}
form.append(submitbutton(formUnique + "action", "Sign out"));
}
StringBuilder body = new StringBuilder();
body.append(div(ContainerType.CLASS, "signin", form.toString()));
if (error != null) {
body.append(error);
}
else if (currentUser == null) {
Browser browser = Browser.getBrowser(conn);
if (browser == null) {
body.append("Welcome, no valid cookie found, try a page " +
a("JavaScript:location.reload(true);", "refresh") + ".");
} else {
body.append("Welcome ");
String details = WareHouse.getUrlPathForClass(page.tools.stats.BrowserInfo.class)
+ "?browserID=" + browser.getId();
body.append(a(details, "guest") + ", please sign in or ");
String register = WareHouse.getUrlPathForClass(page.tools.admin.UserProfile.class) +
"?completetarget=" + conn.getRequest().getUrl();
body.append(a(register, "register") + " a new user account.");
}
}
else if (currentUser.getPrivilege().isAbove(Privilege.GUEST)) {
body.append("Logged in as " + currentUser.getEmail());
String userID = currentUser.getId();
String develop = WareHouse.getUrlPathForClass(page.tools.management.SandBox.class);
String upload = WareHouse.getUrlPathForClass(page.tools.management.FileUploadPage.class);
String edit = WareHouse.getUrlPathForClass(page.example.UserFiles.class) + "?userID=" + userID;
String details = WareHouse.getUrlPathForClass(page.tools.stats.BrowserInfo.class) + "?userID=" + userID;
body.append(" [ ");
body.append(a(develop, "Develop") + " | ");
body.append(a(upload, "Upload") + " | ");
body.append(a(edit, "My Files") + " | ");
body.append(a(details, "My Details") + " ");
body.append("]");
if (currentUser.getPrivilege().isAbove(Privilege.PREMIUM_USER)) {
body.append(" (" + currentUser.getPrivilege().getLabel() + ")");
}
}
return form(body.toString(), conn.getRequest().getUri());
}
private String implantCookie(User user, String domain, String alt) {
String extImg = WareHouse.getUrlPathForClass(page.image.SetCookie.class)
+ "?userID=" + user.getId();
return image(domain + extImg, alt, "title='" + alt + "' width='1' height='1'");
}
}