Skip to content

Commit

Permalink
Merge pull request plantuml#74 from roxspring/support-post-requests
Browse files Browse the repository at this point in the history
Add POST support plus PSystemError diagrams results generate 400 Bad Request status codes
  • Loading branch information
arnaudroques authored Apr 19, 2018
2 parents fe305e0 + 5ef45f6 commit cb2cb80
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,9 @@ void sendDiagram(String uml, int idx) throws IOException {
addHeaderForCache(blockUml);
}
final Diagram diagram = blockUml.getDiagram();
if (diagram instanceof PSystemError) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
}
final ImageData result = diagram.exportDiagram(response.getOutputStream(), idx, new FileFormatOption(format));
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,18 @@
*/
package net.sourceforge.plantuml.servlet;

import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.sourceforge.plantuml.FileFormat;
import net.sourceforge.plantuml.servlet.utility.UmlExtractor;

import javax.imageio.IIOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sourceforge.plantuml.FileFormat;
import net.sourceforge.plantuml.servlet.utility.UmlExtractor;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* Common service servlet to produce diagram from compressed UML source contained in the end part of the requested URI.
Expand All @@ -46,6 +47,7 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro

// build the UML source from the compressed request parameter
final String[] sourceAndIdx = getSourceAndIdx(request);
final int idx = Integer.parseInt(sourceAndIdx[1]);
final String uml;
try {
uml = UmlExtractor.getUmlSource(sourceAndIdx[0]);
Expand All @@ -55,9 +57,38 @@ public void doGet(HttpServletRequest request, HttpServletResponse response) thro
return;
}

doDiagramResponse(request, response, uml, idx);
}

@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {

// build the UML source from the compressed request parameter
final String[] sourceAndIdx = getSourceAndIdx(request);
final int idx = Integer.parseInt(sourceAndIdx[1]);

final StringBuilder uml = new StringBuilder();
final BufferedReader in = request.getReader();
while (true) {
final String line = in.readLine();
if (line == null) {
break;
}
uml.append(line).append('\n');
}

doDiagramResponse(request, response, uml.toString(), idx);
}

private void doDiagramResponse(
HttpServletRequest request,
HttpServletResponse response,
String uml,
int idx)
throws IOException {

// generate the response
DiagramResponse dr = new DiagramResponse(response, getOutputFormat(), request);
final int idx = Integer.parseInt(sourceAndIdx[1]);
try {
dr.sendDiagram(uml, idx);
} catch (IIOException iioe) {
Expand Down
44 changes: 44 additions & 0 deletions src/test/java/net/sourceforge/plantuml/servlet/TestSVG.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package net.sourceforge.plantuml.servlet;

import com.meterware.httpunit.GetMethodWebRequest;
import com.meterware.httpunit.PostMethodWebRequest;
import com.meterware.httpunit.WebConversation;
import com.meterware.httpunit.WebRequest;
import com.meterware.httpunit.WebResponse;

import java.io.ByteArrayInputStream;
import java.nio.charset.Charset;
import java.util.Scanner;

public class TestSVG extends WebappTestCase {
Expand All @@ -25,6 +28,47 @@ public void testSimpleSequenceDiagram() throws Exception {
assertTrue(diagramLen < 3000);
}

/**
* Verifies the generation of the SVG for the Bob -> Alice sample
*/
public void testPostedSequenceDiagram() throws Exception {
WebConversation conversation = new WebConversation();
PostMethodWebRequest request = new PostMethodWebRequest(
getServerUrl() + "svg/",
new ByteArrayInputStream("@startuml\nBob -> Alice\n@enduml".getBytes(Charset.defaultCharset())),
"text/plain");

WebResponse response = conversation.getResource(request);

assertEquals(200, response.getResponseCode());

// Analyze response
// Verifies the Content-Type header
assertEquals("Response content type is not SVG", "image/svg+xml", response.getContentType());
// Get the content and verify its size

String diagram = response.getText();

int diagramLen = diagram.length();
assertTrue(diagramLen > 1000);
assertTrue(diagramLen < 3000);
}

/**
* Verifies the generation of the SVG for the Bob -> Alice sample
*/
public void testPostedInvalidSequenceDiagram() throws Exception {
WebConversation conversation = new WebConversation();
PostMethodWebRequest request = new PostMethodWebRequest(
getServerUrl() + "svg/",
new ByteArrayInputStream("@startuml\n[Bob\n@enduml".getBytes(Charset.defaultCharset())),
"text/plain");

WebResponse response = conversation.getResource(request);

assertEquals(400, response.getResponseCode());
}

/**
* Check the content of the SVG
*/
Expand Down

0 comments on commit cb2cb80

Please sign in to comment.