- if ((hs == null || !((Boolean) hs.getAttribute("loggedin")))
- && !"/login".equals(req.getPathInfo())) {
- System.out.println(req.getPathInfo());
- resp.sendRedirect("/login");
- return;
- }
- if (pages.containsKey(req.getPathInfo())) {
- Page p = pages.get(req.getPathInfo());
- p.doGet(req, resp);
+ final Page p = getPage(req.getPathInfo());
+ if (p != null) {
+
+ 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;
+ }
+ HashMap<String, Object> vars = new HashMap<String, Object>();
+
+ resp.setContentType("text/html; charset=utf-8");
+ Outputable content = new Outputable() {
+
+ @Override
+ public void output(PrintWriter out, Language l, Map<String, Object> vars) {
+ try {
+ if (req.getMethod().equals("POST")) {
+ p.doPost(req, resp);
+ } else {
+ p.doGet(req, resp);
+ }
+ } catch (CSRFException err) {
+ try {
+ resp.sendError(500, "CSRF invalid");
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ }
+ };
+ vars.put("menu", m);
+ vars.put("title", p.getTitle());
+ vars.put("static", ServerConstants.getStaticHostNamePort());
+ vars.put("year", Calendar.getInstance().get(Calendar.YEAR));
+ vars.put("content", content);
+ baseTemplate.output(resp.getWriter(), Page.getLanguage(req), vars);