private static String uriFrom(Request<?> sdkRequest) { StringBuilder uriBuilder = new StringBuilder(sdkRequest.getEndpoint().toString()); if (!StringUtils.isNullOrEmpty(sdkRequest.getResourcePath())) { uriBuilder.append(sdkRequest.getResourcePath()); } QueryStringEncoder encoder = new QueryStringEncoder(uriBuilder.toString()); for (Map.Entry<String, List<String>> param : sdkRequest.getParameters().entrySet()) { for (String value : param.getValue()) { encoder.addParam(param.getKey(), value); } } return encoder.toString(); }
private String generateUrl(Request<?> request) { URI endpoint = request.getEndpoint(); String uri = SdkHttpUtils.appendUri(endpoint.toString(), request.getResourcePath(), true); String encodedParams = SdkHttpUtils.encodeParameters(request); if (encodedParams != null && !encodedParams.isEmpty()) { uri += "?" + encodedParams; } return uri; }
private String generateUrl(Request<?> request) { URI endpoint = request.getEndpoint(); String uri = SdkHttpUtils.appendUri(endpoint.toString(), request.getResourcePath(), true); String encodedParams = SdkHttpUtils.encodeParameters(request); if (encodedParams != null) { uri += "?" + encodedParams; } return uri; }
String resourcePath = request.getResourcePath(); if (resourcePath != null) { String newResourcePath = resourcePath.replace("{jobType}", "archive-retrievals");
boolean urlEncode) { String resourcePath = urlEncode ? SdkHttpUtils.urlEncode(request.getResourcePath(), true) : request.getResourcePath();
boolean urlEncode) { String resourcePath = urlEncode ? SdkHttpUtils.urlEncode(request.getResourcePath(), true) : request.getResourcePath();
@Override public void marshall(T val, JsonMarshallerContext context, MarshallingInfo<T> marshallingInfo) { context.request().setResourcePath( pathMarshaller.marshall(context.request().getResourcePath(), marshallingInfo.marshallLocationName(), converter.convert(val))); }
@Override public HttpRequestBase create(final Request<?> request, final HttpClientSettings settings) throws FakeIOException { URI endpoint = request.getEndpoint(); /* * HttpClient cannot handle url in pattern of "http://host//path", so we * have to escape the double-slash between endpoint and resource-path * into "/%2F" */ String uri = SdkHttpUtils.appendUri(endpoint.toString(), request .getResourcePath(), true); String encodedParams = SdkHttpUtils.encodeParameters(request); /* * For all non-POST requests, and any POST requests that already have a * payload, we put the encoded params directly in the URI, otherwise, * we'll put them in the POST request's payload. */ boolean requestHasNoPayload = request.getContent() != null; boolean requestIsPost = request.getHttpMethod() == HttpMethodName.POST; boolean putParamsInUri = !requestIsPost || requestHasNoPayload; if (encodedParams != null && putParamsInUri) { uri += "?" + encodedParams; } final HttpRequestBase base = createApacheRequest(request, uri, encodedParams); addHeadersToRequest(base, request); addRequestConfig(base, request, settings); return base; }
/** * Returns the path to the resource being requested. * * @return The path to the resource being requested. */ public String getPath() { return request.getResourcePath(); }
private String getCanonicalizedResourcePath(Request<?> request) { String resourcePath = ""; if (request.getEndpoint().getPath() != null) { resourcePath += request.getEndpoint().getPath(); } if (request.getResourcePath() != null) { if (resourcePath.length() > 0 && !resourcePath.endsWith("/") && !request.getResourcePath().startsWith("/")) { resourcePath += "/"; } resourcePath += request.getResourcePath(); } else if (!resourcePath.endsWith("/")) { resourcePath += "/"; } if (!resourcePath.startsWith("/")) { resourcePath = "/" + resourcePath; } if (resourcePath.startsWith("//")) { resourcePath = resourcePath.substring(1); } return resourcePath; }
private String generateUrl(Request<?> request) { URI endpoint = request.getEndpoint(); String uri = HttpUtils.appendUri(endpoint.toString(), request.getResourcePath(), true); String encodedParams = HttpUtils.encodeParameters(request); if (encodedParams != null) { uri += "?" + encodedParams; } return uri; }
boolean removeLeadingSlashInResourcePath, boolean urlEncode) { String resourcePath = urlEncode ? HttpUtils.urlEncode(request.getResourcePath(), true) : request.getResourcePath();
request.addHeader(name, String.valueOf(arg)); } else if ("path".equals(location)) { String path = request.getResourcePath(); path = path.replaceAll("\\{" + name + "\\}", String.valueOf(arg)); request.setResourcePath(path);
@Override public void marshall(T val, JsonMarshallerContext context, MarshallingInfo<T> marshallingInfo) { context.request().setResourcePath( pathMarshaller.marshall(context.request().getResourcePath(), marshallingInfo.marshallLocationName(), converter.convert(val))); }
protected String getCanonicalRequest(Request<?> request, String contentSha256) { /* This would url-encode the resource path for the first time */ final String path = HttpUtils.appendUri(request.getEndpoint().getPath(), request.getResourcePath()); final String canonicalRequest = request.getHttpMethod().toString() + "\n" + /* * This would optionally double url-encode the resource * path */ getCanonicalizedResourcePath(path, doubleUrlEncode) + "\n" + getCanonicalizedQueryString(request) + "\n" + getCanonicalizedHeaderString(request) + "\n" + getSignedHeadersString(request) + "\n" + contentSha256; log.debug("AWS4 Canonical Request: '\"" + canonicalRequest + "\""); return canonicalRequest; }
@Test public void testCreatePutObjectRequestWithSpecialCharacterKeys() { final String bucketName = "bucket"; final String key = "key%^!@#*()"; final File file = new File(key); final HttpMethodName method = HttpMethodName.PUT; final PutObjectRequest originalRequest = new PutObjectRequest(bucketName, key, file); final Request<?> request = s3.createRequest(bucketName, key, originalRequest, method); assertEquals(String.format("%s.s3.amazonaws.com", bucketName), request.getEndpoint().getHost()); assertEquals(method, request.getHttpMethod()); assertTrue(request.getResourcePath().contains(key)); }
@Test public void testCreateGetObjectRequestWithSpecialCharacterKeys() { final String bucketName = "bucket"; final String key = "key%^!@#*()"; final HttpMethodName method = HttpMethodName.GET; final GetObjectRequest originalRequest = new GetObjectRequest(bucketName, key); final Request<?> request = s3.createRequest(bucketName, key, originalRequest, method); assertEquals(String.format("%s.s3.amazonaws.com", bucketName), request.getEndpoint().getHost()); assertEquals(method, request.getHttpMethod()); assertTrue(request.getResourcePath().contains(key)); }
@Test public void testCreateRequestNonDNS() { final String bucketName = "bucket.with.dot"; final String key = "key"; final File file = new File(key); final HttpMethodName method = HttpMethodName.PUT; final PutObjectRequest originalRequest = new PutObjectRequest(bucketName, key, file); final Request<?> request = s3.createRequest(bucketName, key, originalRequest, method); assertEquals("s3.amazonaws.com", request.getEndpoint().getHost()); assertEquals(String.format("%s/%s", bucketName, key), request.getResourcePath()); assertEquals(method, request.getHttpMethod()); }
@Override public HttpRequestBase create(final Request<?> request, final HttpClientSettings settings) throws FakeIOException { URI endpoint = request.getEndpoint(); /* * HttpClient cannot handle url in pattern of "http://host//path", so we * have to escape the double-slash between endpoint and resource-path * into "/%2F" */ String uri = SdkHttpUtils.appendUri(endpoint.toString(), request .getResourcePath(), true); String encodedParams = SdkHttpUtils.encodeParameters(request); /* * For all non-POST requests, and any POST requests that already have a * payload, we put the encoded params directly in the URI, otherwise, * we'll put them in the POST request's payload. */ boolean requestHasNoPayload = request.getContent() != null; boolean requestIsPost = request.getHttpMethod() == HttpMethodName.POST; boolean putParamsInUri = !requestIsPost || requestHasNoPayload; if (encodedParams != null && putParamsInUri) { uri += "?" + encodedParams; } final HttpRequestBase base = createApacheRequest(request, uri, encodedParams); addHeadersToRequest(base, request); addRequestConfig(base, request, settings); return base; }
@Test public void testCreateSignerWithSpecialCharacterKeys() { s3.setS3ClientOptions(accelerateOption); final Regions region = Regions.US_WEST_2; s3.setRegion(Region.getRegion(region)); final String bucketName = "bucket"; final String key = "key%^!@#*()"; final HttpMethodName method = HttpMethodName.GET; final GetObjectRequest originalRequest = new GetObjectRequest(bucketName, key); final Request<?> request = s3.createRequest(bucketName, key, originalRequest, method); final Signer signer = s3.createSigner(request, bucketName, key); assertTrue(signer instanceof AWSS3V4Signer); signer.sign(request, creds); final String authorization = request.getHeaders().get("Authorization"); assertNotNull(authorization); final String regionName = authorization.split("/")[2]; assertEquals(region.getName(), regionName); assertTrue(request.getResourcePath().contains(key)); }