From fe6b5c7ea016222a71b7fabaaf9e17a9c6074669 Mon Sep 17 00:00:00 2001
From: ulrich <undisclosed>
Date: Wed, 04 Dec 2019 17:06:52 +0000
Subject: [PATCH] Markdown-Unterstuetzung hinzugefuegt

---
 src/de/uhilger/wbx/web/MdServlet.java |  152 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 152 insertions(+), 0 deletions(-)

diff --git a/src/de/uhilger/wbx/web/MdServlet.java b/src/de/uhilger/wbx/web/MdServlet.java
new file mode 100644
index 0000000..919dc63
--- /dev/null
+++ b/src/de/uhilger/wbx/web/MdServlet.java
@@ -0,0 +1,152 @@
+package de.uhilger.wbx.web;
+
+/*
+    WebBox - Dein Server.
+    Copyright (C) 2019 Ulrich Hilger, http://uhilger.de
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU Affero General Public License as
+    published by the Free Software Foundation, either version 3 of the
+    License, or (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU Affero General Public License for more details.
+
+    You should have received a copy of the GNU Affero General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+import java.io.IOException;
+import java.security.Principal;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.servlet.ServletException;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.apache.catalina.servlets.DefaultServlet;
+
+/**
+ * Das MdServlet f&uuml;gt dem DefaultServlet von Tomcat 
+ * Methoden hinzu, mit denen Markdown-Inhalte (*.md) 
+ * zu ganzen HTML-Seiten 
+ * mit head und body tags sowie Stylesheet-Verweisen 
+ * erg&auml;nzt werden
+ * 
+ * Die hier hinzugefuegten Inhalte verweisen lediglich auf 
+ * die Javscript-Biliothek strapdown.js 
+ * (http://strapdownjs.com), das Rendern 
+ * des Markdown zu HTML geschieht dann auf dem Client.
+ * 
+ * TODO: Stylesheets dynamisch einbinden
+ */
+public class MdServlet extends DefaultServlet {
+  
+  private static final Logger logger = Logger.getLogger(MdServlet.class.getName());
+  private static final String HOME_CTX = "/home";
+
+  private String getTitle() {
+    String title = null;
+    return title;
+  }
+  
+  private void seiteAusgeben(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
+    ServletOutputStream out = response.getOutputStream();
+    printHeader(out, request);
+    super.doGet(request, response);
+    printFooter(out);
+  }
+  
+  private void printHeader(ServletOutputStream out, HttpServletRequest request) throws IOException {
+    out.print("<!DOCTYPE html>\r\n");
+    out.print("<html><head>\r\n");
+    out.print("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/>\r\n");
+    out.print("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
+    out.print("<link rel=\"stylesheet\" type=\"text/css\" href=\"/jslib/sd/strapdown.css\">\r\n");
+    String title = getTitle();
+    if(title != null) {
+      out.print("<title>");
+      out.print(title);
+      out.print(" ");
+      out.print(request.getRequestURI());
+      out.print("</title>\r\n");
+    }
+    out.print("</head><body>\r\n");
+    out.print("<xmp theme=\"united\" style=\"display:none;\">\r\n");
+  }
+  
+  private void printFooter(ServletOutputStream out) throws IOException {
+    out.print("\r\n</xmp>\r\n");
+    out.print("<script src=\"/jslib/sd/strapdown.js\"></script>\r\n");
+    out.print("</body></html>");
+  }
+  
+  /**
+   * Handles the HTTP <code>GET</code> method.
+   *
+   * @param request servlet request
+   * @param response servlet response
+   * @throws ServletException if a servlet-specific error occurs
+   * @throws IOException if an I/O error occurs
+   */
+  @Override
+  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException  {
+    String contextPath = request.getContextPath();
+    if(HOME_CTX.equals(contextPath)) {
+      String userName = getUserName(request);
+      if (userName != null) {
+        String urlUser = getUrlUser(request, userName);
+        if(userName.equals(urlUser)) {
+          seiteAusgeben(request, response);
+        } else {
+          logger.fine("Wrong user.");
+        }
+      } else {
+        logger.fine("Missing login.");
+      }
+    } else {
+      seiteAusgeben(request, response);
+    }
+  }
+  
+  protected String getUrlUser(HttpServletRequest request, String userName) {
+    String result = "";
+    String requestUrlStr = request.getRequestURL().toString();
+    String contextPath = request.getContextPath();
+    if(contextPath != null && requestUrlStr != null && userName != null) {
+      int start = requestUrlStr.indexOf(contextPath);
+      start += contextPath.length();
+      start++;
+      int end = start + userName.length();
+      try {
+        result = requestUrlStr.substring(start, end);
+      } catch(Exception ex) {
+        logger.log(Level.SEVERE, ex.getLocalizedMessage(), ex);
+      }
+    }
+    return result;
+  }
+  
+  protected String getUserName(HttpServletRequest hr) {
+    String userName = null;
+    Object p = hr.getUserPrincipal();
+    if (p instanceof Principal) {
+      userName = ((Principal) p).getName();
+    }
+    return userName;
+  }
+  
+  /**
+   * Returns a short description of the servlet.
+   *
+   * @return a String containing servlet description
+   */
+  @Override
+  public String getServletInfo() {
+    return "MarkdownWrapper Servlet";
+  }
+
+}

--
Gitblit v1.9.3