From 2ef1bbe443b09bbc8f5ceac7c90f4514746d8892 Mon Sep 17 00:00:00 2001
From: ulrich <not disclosed>
Date: Thu, 28 Dec 2017 18:18:28 +0000
Subject: [PATCH] Filter fuer Markdown funbktioniert. Aber drei verschiedene Markdown-Libraries geben allesamt keine vollstaendige HTML-Seite aus. Hier muss noch herausgefunden werden, woran das liegen kann. Vielleicht ein Encoding-Problem. Oder ein unvollstaendiger Stream...

---
 src/de/uhilger/wbx/web/GenericResponseWrapper.java |    6 ++-
 src/de/uhilger/wbx/web/MyGenericFilter.java        |    1 
 src/de/uhilger/wbx/web/MarkdownFilter.java         |   91 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 96 insertions(+), 2 deletions(-)

diff --git a/src/de/uhilger/wbx/web/GenericResponseWrapper.java b/src/de/uhilger/wbx/web/GenericResponseWrapper.java
index 99f6503..1ccf9ea 100644
--- a/src/de/uhilger/wbx/web/GenericResponseWrapper.java
+++ b/src/de/uhilger/wbx/web/GenericResponseWrapper.java
@@ -42,11 +42,13 @@
   } 
  
   public ServletOutputStream getOutputStream() { 
-    return new FilterServletOutputStream(output); 
+    FilterServletOutputStream f = new FilterServletOutputStream(output);
+    return f; 
   } 
   
   public PrintWriter getWriter() { 
-    return new PrintWriter(getOutputStream(),true); 
+    PrintWriter pw = new PrintWriter(getOutputStream(),true); 
+    return pw;
   } 
  
   public void setContentLength(int length) { 
diff --git a/src/de/uhilger/wbx/web/MarkdownFilter.java b/src/de/uhilger/wbx/web/MarkdownFilter.java
new file mode 100644
index 0000000..390b771
--- /dev/null
+++ b/src/de/uhilger/wbx/web/MarkdownFilter.java
@@ -0,0 +1,91 @@
+/*
+    WebBox - Dein Server.
+    Copyright (C) 2017 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/>.
+ */
+package de.uhilger.wbx.web;
+
+import com.github.rjeschke.txtmark.Processor;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.logging.Logger;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.markdown4j.Markdown4jProcessor;
+
+
+/**
+ * Ein Filter zur Verwandlung von Markdown-Text in HTML
+ *
+ * @author ulrich
+ */
+public class MarkdownFilter implements javax.servlet.Filter {
+
+  private static final Logger logger = Logger.getLogger(MarkdownFilter.class.getName());
+  private static final String EXT_MD = ".md";
+  public FilterConfig filterConfig;
+
+  @Override
+  public void doFilter(final ServletRequest request,
+          final ServletResponse response,
+          FilterChain chain)
+          throws IOException, ServletException {
+    response.setCharacterEncoding("UTF-8");
+    HttpServletRequest hr = (HttpServletRequest) request;
+    String servletPath = hr.getServletPath();
+    if(servletPath.toLowerCase().endsWith(EXT_MD)) {
+      OutputStream out = response.getOutputStream();
+      //out.write(new String("<HR>PRE<HR>").getBytes());
+      GenericResponseWrapper wrapper
+              = new GenericResponseWrapper((HttpServletResponse) response);
+      wrapper.setCharacterEncoding("UTF-8");
+      //wrapper.setContentLength(100000);
+      chain.doFilter(request, wrapper);
+
+      String responseContent = new String(wrapper.getData(), "UTF-8");
+      
+      String html = new Markdown4jProcessor().process(responseContent);
+      //String result = Processor.process(responseContent);
+      
+      out.write(html.getBytes());
+      //out.write(new String("<HR>POST<HR>").getBytes());
+      out.close();
+    } else {
+      chain.doFilter(request, response);
+    }
+    /*
+    logger.info("requestURL: " + hr.getRequestURL().toString());
+    logger.info("ContextPath: " + hr.getContextPath());
+    logger.info("ServletPath: " + hr.getServletPath());
+    logger.info("PathInfo: " + hr.getPathInfo());
+     */
+  }
+
+  @Override
+  public void init(FilterConfig filterConfig) throws ServletException {
+    this.filterConfig = filterConfig;
+  }
+
+  @Override
+  public void destroy() {
+    // ..
+  }
+
+}
diff --git a/src/de/uhilger/wbx/web/MyGenericFilter.java b/src/de/uhilger/wbx/web/MyGenericFilter.java
index 34b2c1e..6948819 100644
--- a/src/de/uhilger/wbx/web/MyGenericFilter.java
+++ b/src/de/uhilger/wbx/web/MyGenericFilter.java
@@ -35,6 +35,7 @@
                        final ServletResponse response,
                        FilterChain chain)
       throws java.io.IOException, javax.servlet.ServletException { 
+    response.setCharacterEncoding("UTF-8");
     chain.doFilter(request,response);
   } 
  

--
Gitblit v1.9.3