public HttpResponse fetch(HttpRequest request) { requests.add(request); return new HttpResponseBuilder() .setMetadata(PRELOAD_METADATA) .setResponseString(PRELOAD_CONTENT) .addHeader("Set-Cookie", "yo=momma") .create(); } }
/** {@inheritDoc} */ @Override public HttpResponse rewriteHttpResponse(HttpRequest req, HttpResponse resp) throws RewritingException { HttpResponseBuilder builder = new HttpResponseBuilder(resp); if (StringUtils.isEmpty(builder.getContent())) { return resp; } return super.rewriteHttpResponse(req, resp); } }
protected BufferedImage readJpeg(HttpResponseBuilder response) throws ImageReadException, IOException { return JPEGOptimizer.readJpeg(response.getContentBytes()); } }
public static void setCachingHeaders(HttpResponseBuilder response, int ttl, boolean noProxy) { // Initial cache control headers are in this response, we should now sanitize them or set them if they are missing. String cacheControl = response.getHeader("Cache-Control"); String pragma = response.getHeader("Pragma"); for (Pair<String, String> header : HttpUtil.getCachingHeadersToSet(ttl, cacheControl, pragma, noProxy)) { response.setHeader(header.one, header.two); } }
@Test public void testNullHeaderNamesStripped() { HttpResponse response = new HttpResponseBuilder() .addHeader(null, "dummy") .create(); for (String key : response.getHeaders().keySet()) { assertNotNull("Null header not removed.", key); } }
@Test public void setEncoding() { HttpResponseBuilder builder = new HttpResponseBuilder() .addHeader("Content-Type", "text/html; charset=Big5") .setEncoding(Charsets.UTF_8); Multimap<String, String> headers = builder.getHeaders(); assertEquals("text/html; charset=UTF-8", headers.get("Content-Type").iterator().next()); }
private void validateRewritten(String content, Uri base, String expected) throws Exception { HttpResponseBuilder response = new HttpResponseBuilder().setHeader("Content-Type", "text/css"); response.setContent(content); HttpRequest request = new HttpRequest(base); rewriter.rewrite(request, response); assertEquals(StringUtils.deleteWhitespace(expected), StringUtils.deleteWhitespace(response.getContent())); }
@Test public void setCacheControlMaxAgeWithBadMaxAgeFormat() { HttpResponseBuilder builder = new HttpResponseBuilder() .addHeader("Cache-Control", "public, max-age=12=ab") .setCacheControlMaxAge(12345); Multimap<String, String> headers = builder.getHeaders(); assertEquals("public,max-age=12=ab,max-age=12345", headers.get("Cache-Control").iterator().next()); }
@Test public void setStrictNoCache() { HttpResponseBuilder builder = new HttpResponseBuilder() .addHeader("Cache-Control", "public,max-age=100") .addHeader("Expires", "some time stamp normally goes here") .setStrictNoCache(); Multimap<String, String> headers = builder.getHeaders(); assertFalse("Expires header not removed.", headers.containsKey("Expires")); assertEquals("no-cache", headers.get("Cache-Control").iterator().next()); assertEquals("no-cache", headers.get("Pragma").iterator().next()); }
protected HttpResponse createResponse(String resource, String mimeType) throws IOException { byte[] bytes = IOUtils.toByteArray(getClass().getClassLoader().getResourceAsStream(resource)); return new HttpResponseBuilder().addHeader("Content-Type", mimeType) .setResponse(bytes).create(); }
@Test public void setCacheTtl() { HttpResponseBuilder builder = new HttpResponseBuilder() .addHeader("Pragma", "no-cache") .addHeader("Expires", "some time stamp normally goes here") .addHeader("Cache-Control", "no-cache") .setCacheTtl(100); Multimap<String, String> headers = builder.getHeaders(); assertFalse("Expires header not removed.", headers.containsKey("Expires")); assertFalse("Pragma header not removed", headers.containsKey("Pragma")); assertEquals("public,max-age=100", headers.get("Cache-Control").iterator().next()); }
private String rewrite(HttpRequest request, HttpResponse response, Gadget gadget) throws Exception { request.setSanitizationRequested(true); ResponseRewriter rewriter = createRewriter(Collections.<String>emptySet(), Collections.<String>emptySet()); HttpResponseBuilder hrb = new HttpResponseBuilder(parser, response); rewriter.rewrite(request, hrb, gadget); if (hrb.getNumChanges() == 0) { return null; } return hrb.getContent(); }
@Test public void addHeader() { HttpResponseBuilder builder = new HttpResponseBuilder() .addHeader("Foo-bar", "baz"); assertEquals("baz", builder.getHeaders().get("Foo-bar").iterator().next()); }
private void verifyMime(String requestMime, String responseMime, String expectedMime) throws Exception { String url = "http://example.org/foo"; HttpRequest req = new HttpRequest(Uri.parse(url)) .setRewriteMimeType(requestMime); HttpResponseBuilder builder = new HttpResponseBuilder() .setHeader("Content-Type", responseMime); UriUtils.maybeRewriteContentType(req, builder); assertEquals(expectedMime, builder.getHeader("Content-Type")); }
public void rewrite(BufferedImage image) throws IOException { if (outputter == null) { return; } long time = System.currentTimeMillis(); rewriteImpl(image); time = System.currentTimeMillis() - time; if (minBytes != null && minBytes.length != 0) { StringBuilder rewriteMsg = new StringBuilder(24); rewriteMsg.append("c=").append( ((minBytes.length * 100) / response.getContentLength())); if (!getOutputContentType().equals(getOriginalContentType())) { rewriteMsg.append(";o=").append(getOriginalContentType()); } rewriteMsg.append(";t=").append(time); response.clearAllHeaders() .setHeader("Content-Type", getOutputContentType()) .setHeader("X-Shindig-Rewrite", rewriteMsg.toString()) .setResponse(minBytes); } }
@Test public void testRewriteValidImageWithInvalidMimeAndFileExtn() throws Exception { byte[] bytes = getImageBytes("org/apache/shindig/gadgets/rewrite/image/inefficient.png"); HttpResponseBuilder response = getImageResponse(CONTENT_TYPE_BOGUS, bytes); int originalContentLength = response.getContentLength(); rewriter.rewrite(new HttpRequest(Uri.parse("some.junk")), response, null); assertEquals(HttpResponse.SC_OK, response.getHttpStatusCode()); assertEquals(response.getContentLength(), originalContentLength); }
@Test public void testSetNoCache() { int time = roundToSeconds(timeSource.currentTimeMillis()); HttpResponse response = new HttpResponseBuilder() .addHeader("Expires", DateUtil.formatRfc1123Date(1000L * time)) .setStrictNoCache() .create(); assertNull(response.getHeader("Expires")); assertEquals("no-cache", response.getHeader("Pragma")); assertEquals("no-cache", response.getHeader("Cache-Control")); }
@Test public void setExpirationTime() { HttpResponseBuilder builder = new HttpResponseBuilder() .addHeader("Pragma", "no-cache") .addHeader("Cache-Control", "public,max-age=100") .setExpirationTime(100); Multimap<String, String> headers = builder.getHeaders(); assertTrue("No Expires header added.", headers.containsKey("Expires")); assertFalse("Pragma header not removed", headers.containsKey("Pragma")); assertFalse("Cache-Control header not removed", headers.containsKey("Cache-Control")); }
@Test public void testRewriteInvalidImageContentWithValidFileExtn() throws Exception { HttpResponseBuilder response = getImageResponse(CONTENT_TYPE_BOGUS, "This is not an image".getBytes()); rewriter.rewrite(new HttpRequest(Uri.parse("some.png")), response, null); assertEquals(HttpResponse.SC_UNSUPPORTED_MEDIA_TYPE, response.getHttpStatusCode()); assertEquals(CONTENT_TYPE_AND_EXTENSION_MISMATCH, response.create().getResponseAsString()); }
public void rewrite(BufferedImage image) throws IOException { if (outputter == null) { return; } long time = System.currentTimeMillis(); rewriteImpl(image); time = System.currentTimeMillis() - time; if (minBytes != null && minBytes.length != 0) { StringBuilder rewriteMsg = new StringBuilder(24); rewriteMsg.append("c=").append( ((minBytes.length * 100) / response.getContentLength())); if (!getOutputContentType().equals(getOriginalContentType())) { rewriteMsg.append(";o=").append(getOriginalContentType()); } rewriteMsg.append(";t=").append(time); // Removing the original 'Etag' header as we have updated the content. response.removeHeader("ETag"); response .setHeader("Content-Type", getOutputContentType()) .setHeader("X-Shindig-Rewrite", rewriteMsg.toString()) .setResponse(minBytes); } }