/** * Generate a remote content request based on the parameters * sent from the client. * @throws GadgetException */ private sRequest buildHttpRequest(HttpRequestWrapper request) { Uri url = ValidateUrl(request.getParameter(URL_PARAM)); sRequest req = new sRequest(url) .setMethod(GetParameter(request, METHOD_PARAM, "GET")) .setPostBody(request.getRequest().ContentEncoding.GetBytes(GetParameter(request, POST_DATA_PARAM, ""))) .setContainer(getContainer(request)); String headerData = GetParameter(request, HEADERS_PARAM, ""); if (headerData.Length > 0) { String[] headerList = headerData.Split('&'); foreach(String header in headerList) { String[] parts = header.Split('='); if (parts.Length != 2) { throw new GadgetException(GadgetException.Code.INTERNAL_SERVER_ERROR, "Malformed header specified,"); } req.addHeader(HttpUtility.UrlDecode(parts[0]), HttpUtility.UrlDecode(parts[1])); } } //removeUnsafeHeaders(req); req.setIgnoreCache("1".Equals(request.getParameter(NOCACHE_PARAM))); if (request.getParameter(GADGET_PARAM) != null) { req.Gadget = Uri.parse(request.getParameter(GADGET_PARAM)); } // Allow the rewriter to use an externally forced mime type. This is needed // allows proper rewriting of <script src="x"/> where x is returned with // a content type like text/html which unfortunately happens all too often req.setRewriteMimeType(request.getParameter(REWRITE_MIME_TYPE_PARAM)); // Figure out whether authentication is required AuthType auth = AuthType.Parse(GetParameter(request, AUTHZ_PARAM, null)); req.AuthType = auth; if (auth != AuthType.NONE) { req.setSecurityToken(extractAndValidateToken(request.getContext())); req.setOAuthArguments(new OAuthArguments(auth, request.getRequest())); } return req; }