]> WPIA git - gigi.git/commitdiff
Correct login redirection.
authorFelix Dörre <felix@dogcraft.de>
Tue, 24 Jun 2014 17:10:09 +0000 (19:10 +0200)
committerFelix Dörre <felix@dogcraft.de>
Tue, 24 Jun 2014 17:10:09 +0000 (19:10 +0200)
src/org/cacert/gigi/Gigi.java
src/org/cacert/gigi/pages/LoginPage.java
src/org/cacert/gigi/pages/Page.java

index 0420eb7f197cbd589eccd3abce9e30ad99e09eea..28a7394e859587709d57e37e32aaf845bb5389dc 100644 (file)
@@ -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) {
                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;
                        }
                                resp.sendRedirect("/login");
                                return;
                        }
+                       if (p.beforeTemplate(req, resp)) {
+                               return;
+                       }
 
                        String b0 = baseTemplate[0];
                        b0 = makeDynTempl(b0, p);
 
                        String b0 = baseTemplate[0];
                        b0 = makeDynTempl(b0, p);
index 49b42dbe264c3a7a47ab01fa1e8f89c8ca3d49b6..583a6da88168dd380ab70e3864f6bd94e2613d47 100644 (file)
@@ -18,6 +18,8 @@ import org.cacert.gigi.database.DatabaseConnection;
 import org.cacert.gigi.util.PasswordHash;
 
 public class LoginPage extends Page {
 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);
        }
        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 {
        @Override
        public void doGet(HttpServletRequest req, HttpServletResponse resp)
                        throws IOException {
+               resp.getWriter()
+                               .println(
+                                               "<form method='POST' action='/login'>"
+                                                               + "<input type='text' name='username'>"
+                                                               + "<input type='password' name='password'> <input type='submit' value='login'></form>");
+       }
+
+       @Override
+       public boolean beforeTemplate(HttpServletRequest req,
+                       HttpServletResponse resp) throws IOException {
                HttpSession hs = req.getSession();
                if (hs.getAttribute("loggedin") == null) {
                        X509Certificate[] cert = (X509Certificate[]) req
                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(
-                                               "<form method='POST' action='/login'>"
-                                                               + "<input type='text' name='username'>"
-                                                               + "<input type='password' name='password'> <input type='submit' value='login'></form>");
+               return false;
        }
        @Override
        public boolean needsLogin() {
        }
        @Override
        public boolean needsLogin() {
index 2e714b61fdd4306d316547a0690a29ee4e4431e0..386a6d75fcc7d96cb6f4e25cd7afa992abf775bc 100644 (file)
@@ -33,6 +33,10 @@ public abstract class Page {
                return defaultTemplate;
        }
 
                return defaultTemplate;
        }
 
+       public boolean beforeTemplate(HttpServletRequest req,
+                       HttpServletResponse resp) throws IOException {
+               return false;
+       }
        public abstract void doGet(HttpServletRequest req, HttpServletResponse resp)
                        throws IOException;
 
        public abstract void doGet(HttpServletRequest req, HttpServletResponse resp)
                        throws IOException;