From dc71766639ada349bb35f676ad811eb113311d4c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Felix=20D=C3=B6rre?= Date: Tue, 24 Jun 2014 19:10:09 +0200 Subject: [PATCH] Correct login redirection. --- src/org/cacert/gigi/Gigi.java | 6 +++++ src/org/cacert/gigi/pages/LoginPage.java | 33 +++++++++++++++++------- src/org/cacert/gigi/pages/Page.java | 4 +++ 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/src/org/cacert/gigi/Gigi.java b/src/org/cacert/gigi/Gigi.java index 0420eb7f..28a7394e 100644 --- a/src/org/cacert/gigi/Gigi.java +++ b/src/org/cacert/gigi/Gigi.java @@ -68,9 +68,15 @@ public class Gigi extends HttpServlet { if (pages.containsKey(req.getPathInfo())) { Page p = pages.get(req.getPathInfo()); if (p.needsLogin() && hs.getAttribute("loggedin") == null) { + String request = req.getPathInfo(); + request = request.split("\\?")[0]; + hs.setAttribute(LoginPage.LOGIN_RETURNPATH, request); resp.sendRedirect("/login"); return; } + if (p.beforeTemplate(req, resp)) { + return; + } String b0 = baseTemplate[0]; b0 = makeDynTempl(b0, p); diff --git a/src/org/cacert/gigi/pages/LoginPage.java b/src/org/cacert/gigi/pages/LoginPage.java index 49b42dbe..583a6da8 100644 --- a/src/org/cacert/gigi/pages/LoginPage.java +++ b/src/org/cacert/gigi/pages/LoginPage.java @@ -18,6 +18,8 @@ import org.cacert.gigi.database.DatabaseConnection; import org.cacert.gigi.util.PasswordHash; public class LoginPage extends Page { + public static final String LOGIN_RETURNPATH = "login-returnpath"; + public LoginPage(String title) { super(title); } @@ -25,6 +27,16 @@ public class LoginPage extends Page { @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + resp.getWriter() + .println( + "
" + + "" + + "
"); + } + + @Override + public boolean beforeTemplate(HttpServletRequest req, + HttpServletResponse resp) throws IOException { HttpSession hs = req.getSession(); if (hs.getAttribute("loggedin") == null) { X509Certificate[] cert = (X509Certificate[]) req @@ -37,16 +49,19 @@ public class LoginPage extends Page { } } - if (hs.getAttribute("loggedin") != null) { // Redir from login - resp.sendRedirect("/"); - return; + if (hs.getAttribute("loggedin") != null) { + String s = (String) req.getSession().getAttribute(LOGIN_RETURNPATH); + if (s != null) { + if (!s.startsWith("/")) { + s = "/" + s; + } + resp.sendRedirect(s); + } else { + resp.sendRedirect("/"); + } + return true; } - - resp.getWriter() - .println( - "
" - + "" - + "
"); + return false; } @Override public boolean needsLogin() { diff --git a/src/org/cacert/gigi/pages/Page.java b/src/org/cacert/gigi/pages/Page.java index 2e714b61..386a6d75 100644 --- a/src/org/cacert/gigi/pages/Page.java +++ b/src/org/cacert/gigi/pages/Page.java @@ -33,6 +33,10 @@ public abstract class Page { return defaultTemplate; } + public boolean beforeTemplate(HttpServletRequest req, + HttpServletResponse resp) throws IOException { + return false; + } public abstract void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException; -- 2.39.2