001    /*
002     * Copyright (c) 2005 Henri Sivonen
003     * Copyright (c) 2007 Mozilla Foundation
004     *
005     * Permission is hereby granted, free of charge, to any person obtaining a 
006     * copy of this software and associated documentation files (the "Software"), 
007     * to deal in the Software without restriction, including without limitation 
008     * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
009     * and/or sell copies of the Software, and to permit persons to whom the 
010     * Software is furnished to do so, subject to the following conditions:
011     *
012     * The above copyright notice and this permission notice shall be included in 
013     * all copies or substantial portions of the Software.
014     *
015     * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
016     * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
017     * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 
018     * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
019     * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
020     * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
021     * DEALINGS IN THE SOFTWARE.
022     */
023    
024    package nu.validator.servlet;
025    
026    import java.io.IOException;
027    
028    import javax.servlet.ServletException;
029    import javax.servlet.http.HttpServlet;
030    import javax.servlet.http.HttpServletRequest;
031    import javax.servlet.http.HttpServletResponse;
032    
033    import nu.validator.xml.PrudentHttpEntityResolver;
034    
035    import org.apache.log4j.Logger;
036    
037    
038    /**
039     * @version $Id: VerifierServlet.java 90 2007-10-05 10:39:50Z hsivonen $
040     * @author hsivonen
041     */
042    public class VerifierServlet extends HttpServlet {
043        /**
044         * 
045         */
046        private static final long serialVersionUID = 7811043632732680935L;
047    
048        private static final Logger log4j = Logger.getLogger(VerifierServlet.class);
049    
050        static {
051            PrudentHttpEntityResolver.setParams(5000, 5000, 100);
052            PrudentHttpEntityResolver.setUserAgent(System.getProperty(
053                    "nu.validator.servlet.version",
054                    "VerifierServlet-RELAX-NG-Validator/2.x (http://validator.nu/)"));
055        }
056    
057        
058        
059        /**
060         * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
061         */
062        @Override
063        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
064            doPost(request, response);
065        }
066    
067    
068    
069        /**
070         * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest,
071         *      javax.servlet.http.HttpServletResponse)
072         */
073        protected void doPost(HttpServletRequest request,
074                HttpServletResponse response) throws ServletException, IOException {
075            String pathInfo = request.getPathInfo();
076            String serverName = request.getServerName();
077            log4j.debug("pathInfo: " + pathInfo);
078            log4j.debug("serverName: " + serverName);
079            if (serverName.endsWith("validator.nu")) {
080                if ("validator.nu".equals(serverName)) {
081                    if ("/".equals(pathInfo)) {
082                        new VerifierServletTransaction(request, response).service();
083                    } else if ("/html5/".equals(pathInfo)) {
084                        response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
085                        String queryString = request.getQueryString();
086                        response.setHeader("Location", "http://html5.validator.nu/" + (queryString == null ? "" : "?" + queryString));
087                    } else {
088                        response.sendError(HttpServletResponse.SC_NOT_FOUND);
089                    }
090                } else if ("html5.validator.nu".equals(serverName)) {
091                    if ("/".equals(pathInfo)) {
092                        new Html5ConformanceCheckerTransaction(request, response).service();
093                    } else {
094                        response.sendError(HttpServletResponse.SC_NOT_FOUND);
095                    }
096                } else if ("parsetree.validator.nu".equals(serverName)) {
097                    if ("/".equals(pathInfo)) {
098                        new ParseTreePrinter(request, response).service();
099                    } else {
100                        response.sendError(HttpServletResponse.SC_NOT_FOUND);
101                    }
102                } else {
103                    response.sendError(HttpServletResponse.SC_NOT_FOUND);
104                }
105            } else {
106                if ("/".equals(pathInfo)) {
107                    new VerifierServletTransaction(request, response).service();
108                } else if ("/html5/".equals(pathInfo)) {
109                    new Html5ConformanceCheckerTransaction(request, response).service();
110                } else if ("/parsetree/".equals(pathInfo)) {
111                    new ParseTreePrinter(request, response).service();
112                } else {
113                    response.sendError(HttpServletResponse.SC_NOT_FOUND);
114                }
115            }
116        }
117    }