]> WPIA git - gigi.git/commitdiff
Implement pattern matching for Gigi.
authorFelix Dörre <felix@dogcraft.de>
Wed, 25 Jun 2014 23:33:24 +0000 (01:33 +0200)
committerFelix Dörre <felix@dogcraft.de>
Wed, 25 Jun 2014 23:33:24 +0000 (01:33 +0200)
-Not recursive
"/ble/bla" will be handled by page
/ble/bla
/ble/bla/*
/ble/*

but not by
/*

src/org/cacert/gigi/Gigi.java

index 7900c2ed21b66e311de5337f7a95f654d1a4b916..574e9f0a62dd7c5114d66269d194859ab181cbcf 100644 (file)
@@ -76,8 +76,9 @@ public class Gigi extends HttpServlet {
                        return;
                }
 
-               if (pages.containsKey(req.getPathInfo())) {
-                       Page p = pages.get(req.getPathInfo());
+               Page p = getPage(req.getPathInfo());
+               if (p != null) {
+
                        if (p.needsLogin() && hs.getAttribute("loggedin") == null) {
                                String request = req.getPathInfo();
                                request = request.split("\\?")[0];
@@ -105,6 +106,26 @@ public class Gigi extends HttpServlet {
                        resp.sendError(404, "Page not found.");
                }
 
+       }
+       private Page getPage(String pathInfo) {
+
+               Page page = pages.get(pathInfo);
+               if (page != null) {
+                       return page;
+               }
+               page = pages.get(pathInfo + "/*");
+               if (page != null) {
+                       return page;
+               }
+               int idx = pathInfo.lastIndexOf('/');
+               pathInfo = pathInfo.substring(0, idx);
+
+               page = pages.get(pathInfo + "/*");
+               if (page != null) {
+                       return page;
+               }
+               return null;
+
        }
        private String makeDynTempl(String in, Page p) {
                int year = Calendar.getInstance().get(Calendar.YEAR);