package org.dynmap.servlet;
import static org.dynmap.JSONUtils.s;
import org.dynmap.DynmapCore;
import org.json.simple.JSONObject;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.Date;
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private DynmapCore core;
public static final String USERID_GUEST = "_guest_";
public static final String USERID_ATTRIB = "userid";
public static final String LOGIN_PAGE = "../login.html";
public static final String LOGIN_POST = "/up/login";
private Charset cs_utf8 = Charset.forName("UTF-8");
public LoginServlet(DynmapCore core) {
this.core = core;
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
private void sendResponse(HttpServletResponse resp, String rslt) throws ServletException, IOException {
JSONObject json = new JSONObject();
s(json, "result", rslt);
byte[] b = json.toJSONString().getBytes(cs_utf8);
String dateStr = new Date().toString();
resp.addHeader("Date", dateStr);
resp.setContentType("text/plain; charset=utf-8");
resp.addHeader("Expires", "Thu, 01 Dec 1994 16:00:00 GMT");
resp.addHeader("Last-modified", dateStr);
resp.setContentLength(b.length);
resp.getOutputStream().write(b);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/* Get session - initialize if needed */
HttpSession sess = req.getSession(true);
String uid = (String)sess.getAttribute(USERID_ATTRIB);
if(uid == null) {
uid = USERID_GUEST;
sess.setAttribute(USERID_ATTRIB, uid); /* Set to guest access */
}
if(sess.isNew()) {
sess.setMaxInactiveInterval(60); /* Intialize to 60 seconds */
}
String uri = req.getRequestURI();
if(uri.equals("/up/login")) { /* Process login form */
uid = req.getParameter("j_username");
String pwd = req.getParameter("j_password");
if((uid == null) || (uid.equals("")))
uid = USERID_GUEST;
if(core.checkLogin(uid, pwd)) {
sess.setAttribute(USERID_ATTRIB, uid);
sendResponse(resp, "success");
}
else {
sendResponse(resp, "loginfailed");
}
}
else if(uri.equals("/up/register")) { /* Process register form */
uid = req.getParameter("j_username");
String pwd = req.getParameter("j_password");
String vpwd = req.getParameter("j_verify_password");
String passcode = req.getParameter("j_passcode");
if((pwd == null) || (vpwd == null) || (pwd.equals(vpwd) == false)) {
resp.sendRedirect(LOGIN_PAGE + "?error=verifyfailed");
sendResponse(resp, "verifyfailed");
}
else if(core.registerLogin(uid, pwd, passcode)) { /* Good registration? */
sess.setAttribute(USERID_ATTRIB, uid);
sendResponse(resp, "success");
}
else {
sendResponse(resp, "registerfailed");
}
}
else {
sendResponse(resp, "loginfailed");
}
}
@Override
public void destroy() { }
}