diff options
author | Jesse Morgan <jesse@jesterpm.net> | 2013-06-03 18:30:46 -0700 |
---|---|---|
committer | Jesse Morgan <jesse@jesterpm.net> | 2013-06-03 18:30:46 -0700 |
commit | 9024f49ca63d0e7204bf61de5b06717e2ee6a1e6 (patch) | |
tree | 70526506fc982ddb84317966f7d7bcdd878b47d9 /src/com/p4square/grow/frontend/LoginPageResource.java | |
parent | ee39f861d7a5147a8292647488b7dfc0cbeb1cce (diff) |
Adding Login logic and updating navigation.
Adding a LoginAuthenticator to parse session cookies and a
LoginPageResource to handle submissions to the login page.
Also updating the navigation header to show Take Assessment when the
user is authenticated.
Diffstat (limited to 'src/com/p4square/grow/frontend/LoginPageResource.java')
-rw-r--r-- | src/com/p4square/grow/frontend/LoginPageResource.java | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/src/com/p4square/grow/frontend/LoginPageResource.java b/src/com/p4square/grow/frontend/LoginPageResource.java new file mode 100644 index 0000000..ac9f651 --- /dev/null +++ b/src/com/p4square/grow/frontend/LoginPageResource.java @@ -0,0 +1,103 @@ +/* + * Copyright 2013 Jesse Morgan + */ + +package com.p4square.grow.frontend; + +import java.util.Map; + +import freemarker.template.Template; + +import org.restlet.data.Form; +import org.restlet.data.MediaType; +import org.restlet.data.Status; +import org.restlet.resource.ServerResource; +import org.restlet.representation.Representation; +import org.restlet.ext.freemarker.TemplateRepresentation; + +import org.apache.log4j.Logger; + +import net.jesterpm.fmfacade.FreeMarkerPageResource; + +/** + * LoginPageResource presents a login page template and processes the response. + * Upon successful authentication, the user is redirected to another page and + * a cookie is set. + * + * @author Jesse Morgan <jesse@jesterpm.net> + */ +public class LoginPageResource extends FreeMarkerPageResource { + private static Logger cLog = Logger.getLogger(LoginPageResource.class); + + private GrowFrontend mGrowFrontend; + + private String mErrorMessage; + + @Override + public void doInit() { + super.doInit(); + + mGrowFrontend = (GrowFrontend) getApplication(); + + mErrorMessage = null; + } + + /** + * Return the login page. + */ + @Override + protected Representation get() { + Template t = mGrowFrontend.getTemplate("pages/login.html.ftl"); + + try { + if (t == null) { + setStatus(Status.CLIENT_ERROR_NOT_FOUND); + return null; + } + + Map<String, Object> root = getRootObject(); + + root.put("errorMessage", mErrorMessage); + + return new TemplateRepresentation(t, root, MediaType.TEXT_HTML); + + } catch (Exception e) { + cLog.fatal("Could not render page: " + e.getMessage(), e); + setStatus(Status.SERVER_ERROR_INTERNAL); + return null; + } + } + + /** + * Process login and authenticate the user. + */ + @Override + protected Representation post(Representation entity) { + final Form form = new Form(entity); + final String email = form.getFirstValue("email"); + final String password = form.getFirstValue("password"); + + boolean authenticated = false; + + // TODO: Do something real here + if (email != null && !"".equals(email)) { + cLog.debug("Got login request from " + email); + + // TODO: Encrypt user info + getResponse().getCookieSettings().add(LoginAuthenticator.COOKIE_NAME, email); + + authenticated = true; + } + + if (authenticated) { + // TODO: Better return url. + getResponse().redirectSeeOther("/index.html"); + return null; + + } else { + // Send them back to the login page... + mErrorMessage = "Incorrect Email or Password."; + return get(); + } + } +} |