package http.resource;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import nebula.data.DataStore;
import nebula.data.Entity;
import nebula.data.impl.EditableEntity;
import nebula.server.Resource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class SignupResouce implements Resource {
protected Log log = LogFactory.getLog(this.getClass());
private final DataStore<Entity> userAccessLogs;
private final DataStore<Entity> users;
final RedirectResouce redirectTo;
public SignupResouce(DataStore<Entity> users, DataStore<Entity> userAccessLogs) {
this.users = users;
this.userAccessLogs = userAccessLogs;
redirectTo = new RedirectResouce("/index.html");
}
@Override
public void handle(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {
if (log.isTraceEnabled()) {
log.trace("\tMethod" + req.getMethod());
}
String method = req.getMethod();
if ("POST".equals(method)) {
this.post(req, resp);
} else {
throw new RuntimeException("Unsupport method " + method);
}
}
// @SuppressWarnings("unchecked")
protected void post(HttpServletRequest req, HttpServletResponse resp) throws IOException {
try {
DataStore<Entity> store = users;
String username = req.getParameter("username");
String password = req.getParameter("password");
String email = req.getParameter("email");
String passwordConfirm = req.getParameter("passwordConfirm");
if (!password.equals(passwordConfirm)) {
resp.setStatus(403);
redirectTo.redirectTo(req, resp, "/signup.html");
return;
}
EditableEntity newuser = new EditableEntity();
newuser.put("Name", username);
newuser.put("Password", password);
newuser.put("EMail", email);
store.add(newuser);
store.flush();
// Log access info
EditableEntity accessLog = new EditableEntity();
accessLog.put("User_ID", newuser.getID());
accessLog.put("Timestamp", System.currentTimeMillis());
userAccessLogs.add(accessLog);
redirectTo.redirectTo(req, resp, "/login.html");
} finally {
}
}
}