From 918210790492770b58cb63407d1545575da8d945 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Felix=20D=C3=B6rre?= Date: Thu, 26 Jun 2014 01:33:24 +0200 Subject: [PATCH] Implement pattern matching for Gigi. -Not recursive "/ble/bla" will be handled by page /ble/bla /ble/bla/* /ble/* but not by /* --- src/org/cacert/gigi/Gigi.java | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/org/cacert/gigi/Gigi.java b/src/org/cacert/gigi/Gigi.java index 7900c2ed..574e9f0a 100644 --- a/src/org/cacert/gigi/Gigi.java +++ b/src/org/cacert/gigi/Gigi.java @@ -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); -- 2.39.2