Skip to content

Commit

Permalink
Support accept headers for http about page (#345)
Browse files Browse the repository at this point in the history
* Combine json page with html page based on accept header

* Support old path too
  • Loading branch information
klabarge committed Aug 14, 2018
1 parent 8f2e617 commit c210938
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 47 deletions.
31 changes: 28 additions & 3 deletions src/qz/ws/HttpAboutServlet.java
Expand Up @@ -8,20 +8,31 @@
import org.slf4j.LoggerFactory;
import qz.common.AboutInfo;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Iterator;

/**
* HTTP JSON endpoint for serving QZ Tray information
*/
public class HttpAboutServlet extends DefaultServlet {

private static final Logger log = LoggerFactory.getLogger(PrintSocketServer.class);

private static final int JSON_INDENT = 2;


@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
if ("application/json".equals(request.getHeader("Accept")) || "/json".equals(request.getServletPath())) {
generateJsonResponse(request, response);
} else {
generateHtmlResponse(request, response);
}
}

private void generateHtmlResponse(HttpServletRequest request, HttpServletResponse response) {
StringBuilder display = new StringBuilder();

display.append("<html><body>")
Expand Down Expand Up @@ -51,6 +62,20 @@ protected void doGet(HttpServletRequest request, HttpServletResponse response) t
}
}

private void generateJsonResponse(HttpServletRequest request, HttpServletResponse response) {
JSONObject aboutData = AboutInfo.gatherAbout(request.getServerName());

try {
response.setStatus(HttpServletResponse.SC_OK);
response.setContentType("application/json");
response.getOutputStream().write(aboutData.toString(JSON_INDENT).getBytes(StandardCharsets.UTF_8));
}
catch(Exception e) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
log.warn("Exception occurred writing JSONObject {}", aboutData);
}
}

private StringBuilder generateFromKeys(JSONObject obj, boolean printTitle) throws JSONException {
StringBuilder rows = new StringBuilder();

Expand Down
38 changes: 0 additions & 38 deletions src/qz/ws/JsonAboutServlet.java

This file was deleted.

7 changes: 1 addition & 6 deletions src/qz/ws/PrintSocketServer.java
Expand Up @@ -168,12 +168,7 @@ public Object createWebSocket(ServletUpgradeRequest req, ServletUpgradeResponse
ServletHolder httpServlet = new ServletHolder(new HttpAboutServlet());
httpServlet.setInitParameter("resourceBase","/");
context.addServlet(httpServlet, "/");

// Handle JSON data page
ServletHolder jsonServlet = new ServletHolder(new JsonAboutServlet());
jsonServlet.setInitParameter("resourceBase","/json/");
context.addServlet(jsonServlet, "/json");
context.addServlet(jsonServlet, "/json/");
context.addServlet(httpServlet, "/json");

server.setHandler(context);
server.setStopAtShutdown(true);
Expand Down

0 comments on commit c210938

Please sign in to comment.