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 . */ 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.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.catalina.servlets.DefaultServlet; /** * Das MdServlet fü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ä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("\r\n"); out.print("\r\n"); out.print("\r\n"); out.print("\r\n"); out.print("\r\n"); String title = getTitle(); if(title != null) { out.print(""); out.print(title); out.print(" "); out.print(request.getRequestURI()); out.print("\r\n"); } out.print("\r\n"); out.print("\r\n"); } private void printFooter(ServletOutputStream out) throws IOException { out.print("\r\n\r\n"); out.print("\r\n"); out.print(""); } /** * Handles the HTTP GET 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"; } }