@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { try { makeRequestHandler.fetch(request, response); } catch (GadgetException e) { if (LOG.isLoggable(Level.FINEST)) { LOG.logp(Level.FINEST, classname, "doGet", MessageKeys.HTTP_ERROR_FETCHING, e); } int responseCode = HttpServletResponse.SC_INTERNAL_SERVER_ERROR; if (e.getCode() != GadgetException.Code.INTERNAL_SERVER_ERROR) { responseCode = HttpServletResponse.SC_BAD_REQUEST; } response.sendError(responseCode, e.getMessage() != null ? e.getMessage() : ""); } }
@SuppressWarnings("deprecation") @Test public void testGetContainerNoParam() { expect(request.getParameter(Param.CONTAINER.getKey())).andReturn(null); expect(request.getParameter(Param.SYND.getKey())).andReturn(null); replay(); assertEquals(ContainerConfig.DEFAULT_CONTAINER, MakeRequestHandler.getContainer(request)); } }
/** * Extracts the container name from the request. */ @SuppressWarnings("deprecation") protected static String getContainer(HttpServletRequest request) { String container = getParameter(request, Param.CONTAINER.getKey(), null); if (container == null) { container = getParameter(request, Param.SYND.getKey(), null); } return container != null ? container : ContainerConfig.DEFAULT_CONTAINER; }
/** * Format a response as JSON, including additional JSON inserted by chained content fetchers. */ protected String convertResponseToJson(SecurityToken authToken, HttpServletRequest request, HttpResponse results) throws GadgetException { boolean getFullHeaders = Boolean.parseBoolean(getParameter(request, GET_FULL_HEADERS_PARAM, "false")); String originalUrl = getParameter(request, Param.URL.getKey(), null); String body = results.getResponseAsString(); if (body.length() > 0) { if ("FEED".equals(getParameter(request, CONTENT_TYPE_PARAM, null))) { body = processFeed(originalUrl, request, body); } } Map<String, Object> resp = FetchResponseUtils.getResponseAsJson(results, null, body, getFullHeaders); if (authToken != null) { String updatedAuthToken = authToken.getUpdatedToken(); if (updatedAuthToken != null) { resp.put("st", updatedAuthToken); } } // Use raw param as key as URL may have to be decoded return JsonSerializer.serialize(Collections.singletonMap(originalUrl, resp)); }
/** * Executes a request, returning the response as JSON to be handled by makeRequest. */ public void fetch(HttpServletRequest request, HttpServletResponse response) throws GadgetException, IOException { HttpRequest rcr = buildHttpRequest(request); // Serialize the response HttpResponse results = requestPipeline.execute(rcr); // Rewrite the response if (contentRewriterRegistry != null) { try { results = contentRewriterRegistry.rewriteHttpResponse(rcr, results); } catch (RewritingException e) { throw new GadgetException(GadgetException.Code.INTERNAL_SERVER_ERROR, e, e.getHttpStatusCode()); } } // Serialize the response String output = convertResponseToJson(rcr.getSecurityToken(), request, results); // Find and set the refresh interval setResponseHeaders(request, response, results); response.setStatus(HttpServletResponse.SC_OK); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); response.getWriter().write(UNPARSEABLE_CRUFT + output); }
throws GadgetException, IOException { HttpRequest rcr = buildHttpRequest(request); String container = rcr.getContainer(); final Uri gadgetUri = rcr.getGadget(); String output = convertResponseToJson(rcr.getSecurityToken(), request, results); setResponseHeaders(request, response, results); response.setStatus(HttpServletResponse.SC_OK); response.setCharacterEncoding("UTF-8"); if ("1".equals(getParameter(request, MULTI_PART_FORM_POST_IFRAME, null))) { response.setContentType("text/html"); out.write(IFRAME_RESPONSE_PREFIX);
String urlStr = getParameter(request, Param.URL.getKey(), null); if (urlStr == null) { throw new GadgetException(GadgetException.Code.INVALID_PARAMETER, Param.URL.getKey() String container = null; Uri gadgetUri = null; if ("1".equals(getParameter(request, MULTI_PART_FORM_POST, null))) { container = getContainer(request); String gadgetUrl = getParameter(request, Param.GADGET.getKey(), null); if (gadgetUrl != null) { gadgetUri = Uri.parse(gadgetUrl); HttpRequest req = new HttpRequest(url).setMethod(getParameter(request, METHOD_PARAM, "GET")) .setContainer(container).setGadget(gadgetUri); setPostData(container, request, req); String headerData = getParameter(request, HEADERS_PARAM, ""); if (headerData.length() > 0) { String[] headerList = StringUtils.split(headerData, '&'); } else if ("1".equals(getParameter(request, MULTI_PART_FORM_POST, null))) { req.setIgnoreCache("1".equals(getParameter(request, Param.NO_CACHE.getKey(), null))); String refresh = getParameter(request, Param.REFRESH.getKey(), null); if (refresh != null) { try {
@Test public void testSetResponseHeadersForceParam() throws Exception { HttpResponse results = new HttpResponseBuilder().create(); expect(request.getParameter(Param.REFRESH.getKey())).andReturn("30").anyTimes(); replay(); // not sure why but the following line seems to help this test past deterministically System.out.println("request started at " + HttpUtilTest.testStartTime); handler.setResponseHeaders(request, recorder, results); HttpUtilTest.checkCacheControlHeaders(HttpUtilTest.testStartTime, recorder, 30, false); assertEquals("attachment;filename=p.txt", recorder.getHeader("Content-Disposition")); }
/** * Format a response as JSON, including additional JSON inserted by * chained content fetchers. */ protected String convertResponseToJson(SecurityToken authToken, HttpServletRequest request, HttpResponse results) throws GadgetException { boolean getFullHeaders = Boolean.parseBoolean(getParameter(request, GET_FULL_HEADERS_PARAM, "false")); String originalUrl = request.getParameter(Param.URL.getKey()); String body = results.getResponseAsString(); if (body.length() > 0) { if ("FEED".equals(request.getParameter(CONTENT_TYPE_PARAM))) { body = processFeed(originalUrl, request, body); } } Map<String, Object> resp = FetchResponseUtils.getResponseAsJson(results, null, body, getFullHeaders); if (authToken != null) { String updatedAuthToken = authToken.getUpdatedToken(); if (updatedAuthToken != null) { resp.put("st", updatedAuthToken); } } // Use raw param as key as URL may have to be decoded return JsonSerializer.serialize(Collections.singletonMap(originalUrl, resp)); }
.setMethod(getParameter(request, METHOD_PARAM, "GET")) .setContainer(getContainer(request)); setPostData(request,req); String headerData = getParameter(request, HEADERS_PARAM, ""); if (headerData.length() > 0) { String[] headerList = StringUtils.split(headerData, '&'); AuthType auth = AuthType.parse(getParameter(request, AUTHZ_PARAM, null)); req.setAuthType(auth); if (auth != AuthType.NONE) { req.setSecurityToken(extractAndValidateToken(request)); req.setOAuthArguments(new OAuthArguments(auth, request));
@Test public void testSetResponseHeadersForceParam() throws Exception { HttpResponse results = new HttpResponseBuilder().create(); expect(request.getParameter(Param.REFRESH.getKey())).andReturn("30").anyTimes(); replay(); // not sure why but the following line seems to help this test past deterministically System.out.println("request started at " + HttpUtilTest.testStartTime); handler.setResponseHeaders(request, recorder, results); HttpUtilTest.checkCacheControlHeaders(HttpUtilTest.testStartTime, recorder, 30, false); assertEquals("attachment;filename=p.txt", recorder.getHeader("Content-Disposition")); }
/** * Executes a request, returning the response as JSON to be handled by makeRequest. */ public void fetch(HttpServletRequest request, HttpServletResponse response) throws GadgetException, IOException { HttpRequest rcr = buildHttpRequest(request); // Serialize the response HttpResponse results = requestPipeline.execute(rcr); // Rewrite the response if (contentRewriterRegistry != null) { try { results = contentRewriterRegistry.rewriteHttpResponse(rcr, results); } catch (RewritingException e) { throw new GadgetException(GadgetException.Code.INTERNAL_SERVER_ERROR, e, e.getHttpStatusCode()); } } // Serialize the response String output = convertResponseToJson(rcr.getSecurityToken(), request, results); // Find and set the refresh interval setResponseHeaders(request, response, results); response.setStatus(HttpServletResponse.SC_OK); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); response.getWriter().write(UNPARSEABLE_CRUFT + output); }
/** * Format a response as JSON, including additional JSON inserted by * chained content fetchers. */ protected String convertResponseToJson(SecurityToken authToken, HttpServletRequest request, HttpResponse results) throws GadgetException { boolean getFullHeaders = Boolean.parseBoolean(getParameter(request, GET_FULL_HEADERS_PARAM, "false")); String originalUrl = request.getParameter(Param.URL.getKey()); String body = results.getResponseAsString(); if (body.length() > 0) { if ("FEED".equals(request.getParameter(CONTENT_TYPE_PARAM))) { body = processFeed(originalUrl, request, body); } } Map<String, Object> resp = FetchResponseUtils.getResponseAsJson(results, null, body, getFullHeaders); if (authToken != null) { String updatedAuthToken = authToken.getUpdatedToken(); if (updatedAuthToken != null) { resp.put("st", updatedAuthToken); } } // Use raw param as key as URL may have to be decoded return JsonSerializer.serialize(Collections.singletonMap(originalUrl, resp)); }
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { try { makeRequestHandler.fetch(request, response); } catch (GadgetException e) { int responseCode = HttpServletResponse.SC_INTERNAL_SERVER_ERROR; if (e.getCode() != GadgetException.Code.INTERNAL_SERVER_ERROR) { responseCode = HttpServletResponse.SC_BAD_REQUEST; } response.sendError(responseCode, e.getMessage() != null ? e.getMessage() : ""); } }
.setMethod(getParameter(request, METHOD_PARAM, "GET")) .setContainer(getContainer(request)); setPostData(request,req); String headerData = getParameter(request, HEADERS_PARAM, ""); if (headerData.length() > 0) { String[] headerList = StringUtils.split(headerData, '&'); AuthType auth = AuthType.parse(getParameter(request, AUTHZ_PARAM, null)); req.setAuthType(auth); if (auth != AuthType.NONE) { req.setSecurityToken(extractAndValidateToken(request)); req.setOAuthArguments(new OAuthArguments(auth, request));
@Test public void testSetResponseHeadersForceParam() throws Exception { HttpResponse results = new HttpResponseBuilder().create(); expect(request.getParameter(Param.REFRESH.getKey())).andReturn("30").anyTimes(); replay(); // not sure why but the following line seems to help this test past deterministically System.out.println("request started at " + HttpUtilTest.testStartTime); MakeRequestHandler.setResponseHeaders(request, recorder, results); HttpUtilTest.checkCacheControlHeaders(HttpUtilTest.testStartTime, recorder, 30, false); assertEquals("attachment;filename=p.txt", recorder.getHeader("Content-Disposition")); }
/** * Processes a feed (RSS or Atom) using FeedProcessor. */ private String processFeed(String url, HttpServletRequest req, String xml) throws GadgetException { boolean getSummaries = Boolean.parseBoolean(getParameter(req, GET_SUMMARIES_PARAM, "false")); int numEntries; try { numEntries = Integer.valueOf(getParameter(req, NUM_ENTRIES_PARAM, DEFAULT_NUM_ENTRIES)); } catch (NumberFormatException e) { throw new GadgetException(GadgetException.Code.INVALID_PARAMETER, "numEntries paramater is not a number", HttpResponse.SC_BAD_REQUEST); } return feedProcessorProvider.get().process(url, xml, getSummaries, numEntries).toString(); }
@SuppressWarnings("deprecation") @Test public void testGetContainerWithSynd() { expect(request.getParameter(Param.CONTAINER.getKey())).andReturn(null); expect(request.getParameter(Param.SYND.getKey())).andReturn("syndtainer"); replay(); assertEquals("syndtainer", MakeRequestHandler.getContainer(request)); }
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { try { makeRequestHandler.fetch(request, response); } catch (GadgetException e) { int responseCode = HttpServletResponse.SC_INTERNAL_SERVER_ERROR; if (e.getCode() != GadgetException.Code.INTERNAL_SERVER_ERROR) { responseCode = HttpServletResponse.SC_BAD_REQUEST; } response.sendError(responseCode, e.getMessage() != null ? e.getMessage() : ""); } }
@Test public void testSetResponseHeadersForceParamInvalid() throws Exception { HttpResponse results = new HttpResponseBuilder().create(); expect(request.getParameter(Param.REFRESH.getKey())).andReturn("foo").anyTimes(); replay(); try { handler.setResponseHeaders(request, recorder, results); } catch (GadgetException e) { assertEquals(GadgetException.Code.INVALID_PARAMETER, e.getCode()); } }