diff --git a/pom.xml b/pom.xml index 4a0b1f0..2b56041 100644 --- a/pom.xml +++ b/pom.xml @@ -84,7 +84,7 @@ maven-surefire-plugin 2.14.1 - true + ${skipTests} @@ -174,6 +174,7 @@ yyyyMMdd-HHmm ${maven.build.timestamp} + true @@ -191,11 +192,6 @@ codemirror 3.21 - - HTTPClient - HTTPClient - 0.3-3 - javax.servlet servlet-api @@ -205,19 +201,13 @@ junit junit - 4.13.1 + 4.13.2 test - httpunit - httpunit - 1.7 - test - - - rhino - js - 1.7R2 + net.sourceforge.htmlunit + htmlunit + 2.53.0 test diff --git a/src/main/java/net/sourceforge/plantuml/servlet/OldProxyServlet.java b/src/main/java/net/sourceforge/plantuml/servlet/OldProxyServlet.java index 9aeecc5..50b0684 100644 --- a/src/main/java/net/sourceforge/plantuml/servlet/OldProxyServlet.java +++ b/src/main/java/net/sourceforge/plantuml/servlet/OldProxyServlet.java @@ -23,23 +23,19 @@ */ package net.sourceforge.plantuml.servlet; +import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; import java.net.URL; import java.util.regex.Matcher; import java.util.regex.Pattern; -import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import HTTPClient.CookieModule; -import HTTPClient.HTTPConnection; -import HTTPClient.HTTPResponse; -import HTTPClient.ModuleException; -import HTTPClient.ParseException; - import net.sourceforge.plantuml.FileFormat; import net.sourceforge.plantuml.FileFormatOption; import net.sourceforge.plantuml.SourceStringReader; @@ -52,54 +48,50 @@ import net.sourceforge.plantuml.SourceStringReader; @SuppressWarnings("serial") public class OldProxyServlet extends HttpServlet { - private static final Pattern PROXY_PATTERN = Pattern.compile("/\\w+/proxy/((\\d+)/)?((\\w+)/)?(http://.*)"); + private static final Pattern PROXY_PATTERN = Pattern.compile("/\\w+/proxy/((\\d+)/)?((\\w+)/)?(https?://.*)"); private String format; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { - final String uri = request.getRequestURI(); + // Check if the src URL is valid Matcher proxyMatcher = PROXY_PATTERN.matcher(uri); - if (proxyMatcher.matches()) { - String num = proxyMatcher.group(2); // Optional number of the diagram source - format = proxyMatcher.group(4); // Expected format of the generated diagram - String sourceURL = proxyMatcher.group(5); - handleImageProxy(response, num, sourceURL); - } else { - request.setAttribute("net.sourceforge.plantuml.servlet.decoded", "ERROR Invalid proxy syntax : " + uri); - request.removeAttribute("net.sourceforge.plantuml.servlet.encoded"); - - // forward to index.jsp - RequestDispatcher dispatcher = request.getRequestDispatcher("/index.jsp"); - dispatcher.forward(request, response); + if (!proxyMatcher.matches()) { + // Bad URI format. + response.setStatus(400); + return; } + + String num = proxyMatcher.group(2); // Optional number of the diagram source + format = proxyMatcher.group(4); // Expected format of the generated diagram + String sourceURL = proxyMatcher.group(5); + handleImageProxy(response, num, sourceURL); } private void handleImageProxy(HttpServletResponse response, String num, String source) throws IOException { SourceStringReader reader = new SourceStringReader(getSource(source)); int n = num == null ? 0 : Integer.parseInt(num); - reader.generateImage(response.getOutputStream(), n, new FileFormatOption(getOutputFormat(), false)); + FileFormat fileFormat = getOutputFormat(); + response.addHeader("Content-Type", fileFormat.getMimeType()); + reader.outputImage(response.getOutputStream(), n, new FileFormatOption(fileFormat, false)); } - private String getSource(String uri) throws IOException { - CookieModule.setCookiePolicyHandler(null); - - final Pattern p = Pattern.compile("http://[^/]+(/?.*)"); - final Matcher m = p.matcher(uri); - if (m.find() == false) { - throw new IOException(uri); - } + private String getSource(final String uri) throws IOException { final URL url = new URL(uri); - final HTTPConnection httpConnection = new HTTPConnection(url); - try { - final HTTPResponse resp = httpConnection.Get(m.group(1)); - return resp.getText(); - } catch (ModuleException e) { - throw new IOException(e.toString()); - } catch (ParseException e) { - throw new IOException(e.toString()); + try ( + InputStream responseStream = url.openStream(); + InputStreamReader isr = new InputStreamReader(responseStream); + BufferedReader br = new BufferedReader(isr); + ) { + String line; + StringBuffer sb = new StringBuffer(); + while ((line = br.readLine()) != null) { + sb.append(line); + sb.append("\n"); + } + return sb.toString().trim(); } } diff --git a/src/main/java/net/sourceforge/plantuml/servlet/ProxyServlet.java b/src/main/java/net/sourceforge/plantuml/servlet/ProxyServlet.java index eed3887..d1d0053 100644 --- a/src/main/java/net/sourceforge/plantuml/servlet/ProxyServlet.java +++ b/src/main/java/net/sourceforge/plantuml/servlet/ProxyServlet.java @@ -76,6 +76,7 @@ public class ProxyServlet extends HttpServlet { srcUrl = new URL(source); } catch (MalformedURLException mue) { mue.printStackTrace(); + response.setStatus(400); return; } diff --git a/src/main/webapp/index.jsp b/src/main/webapp/index.jsp index 36100ef..717df36 100644 --- a/src/main/webapp/index.jsp +++ b/src/main/webapp/index.jsp @@ -33,7 +33,7 @@