private HttpRequest signForTemporaryAccess(HttpRequest request, long timeInSeconds) { HttpRequest.Builder<?> builder = request.toBuilder().filters(ImmutableSet.<HttpRequestFilter> of()); String key = temporaryUrlKeySupplier.get(); if (key == null) { throw new UnsupportedOperationException(); } long expiresInSeconds = unixEpochTimestampProvider.get() + timeInSeconds; builder.addQueryParam("temp_url_sig", createSignature(key, createStringToSign(request.getMethod().toUpperCase(), request, expiresInSeconds))); builder.addQueryParam("temp_url_expires", "" + expiresInSeconds); return builder.build(); }
private HttpRequest signForTemporaryAccess(HttpRequest request, long timeInSeconds) { HttpRequest.Builder<?> builder = request.toBuilder().filters(ImmutableSet.<HttpRequestFilter> of()); String key = temporaryUrlKeySupplier.get(); if (key == null) { throw new UnsupportedOperationException(); } long expiresInSeconds = unixEpochTimestampProvider.get() + timeInSeconds; builder.addQueryParam("temp_url_sig", createSignature(key, createStringToSign(request.getMethod().toUpperCase(), request, expiresInSeconds))); builder.addQueryParam("temp_url_expires", "" + expiresInSeconds); return builder.build(); }
private HttpRequest signForTemporaryAccess(HttpRequest request, long timeInSeconds) { HttpRequest.Builder<?> builder = request.toBuilder().filters(ImmutableSet.<HttpRequestFilter> of()); String key = temporaryUrlKeySupplier.get(); if (key == null) { throw new UnsupportedOperationException(); } long expiresInSeconds = unixEpochTimestampProvider.get() + timeInSeconds; builder.addQueryParam("temp_url_sig", createSignature(key, createStringToSign(request.getMethod().toUpperCase(), request, expiresInSeconds))); builder.addQueryParam("temp_url_expires", "" + expiresInSeconds); return builder.build(); }
private HttpRequest signForTemporaryAccess(HttpRequest request, long timeInSeconds) { HttpRequest.Builder<?> builder = request.toBuilder().filters(ImmutableSet.<HttpRequestFilter> of()); String key = temporaryUrlKeySupplier.get(); if (key == null) { throw new UnsupportedOperationException(); } long expiresInSeconds = unixEpochTimestampProvider.get() + timeInSeconds; builder.addQueryParam("temp_url_sig", createSignature(key, createStringToSign(request.getMethod().toUpperCase(), request, expiresInSeconds))); builder.addQueryParam("temp_url_expires", "" + expiresInSeconds); return builder.build(); }
@SuppressWarnings("unchecked") @Override public <R extends HttpRequest> R bindToRequest(R request, Object payload) { NextRecord from = NextRecord.class.cast(payload); Builder<?> builder = request.toBuilder(); builder.addQueryParam("name", from.getName()); if (from.getType().isPresent()) builder.addQueryParam("type", from.getType().get()); if (from.getIdentifier().isPresent()) builder.addQueryParam("identifier", from.getIdentifier().get()); return (R) builder.build(); } }
public void testAddBase64EncodedQueryParamWithNewlines() { String base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ\nabcdefghijklmnopqrstuvwxyz\n0123456789+/="; URI uri = URI.create("http://goo.com:443?header1=value1"); HttpRequest request = HttpRequest.builder().method("GET").endpoint(uri) .addQueryParam("header2", base64Chars).build(); assertEquals( request.getRequestLine(), "GET http://goo.com:443?header1=value1&header2=ABCDEFGHIJKLMNOPQRSTUVWXYZ%0Aabcdefghijklmnopqrstuvwxyz%0A0123456789%2B/%3D HTTP/1.1"); } }
@Override protected HttpRequest getBlob() { return HttpRequest.builder().method("GET") .endpoint("http://localhost/container/name") .addQueryParam("Expires", "1212684799") .addQueryParam("AWSAccessKeyId", "identity") .addQueryParam("Signature", "Z0UqrkQv83rykFxvI3f0dQtxEAM=") .build(); }
public void testSearchRolesWithOptionsReturnsValidResult() { ChefApi api = requestSendsResponse( signed(getHttpRequestBuilder("GET", "/search/role").addQueryParam("q", "name:webserver").build()), HttpResponse.builder().statusCode(200) .payload(payloadFromResourceWithContentType("/search_role.json", MediaType.APPLICATION_JSON)) // .build()); SearchOptions options = SearchOptions.Builder.query("name:webserver"); SearchResult<? extends Role> result = api.searchRoles(options); assertEquals(result.size(), 1); assertEquals(result.iterator().next().getName(), "webserver"); }
@Override protected HttpRequest getBlobWithTime() { return HttpRequest.builder().method("GET") .endpoint("https://container.s3.amazonaws.com/name") .addQueryParam("Expires", "1212683902") .addQueryParam("AWSAccessKeyId", "identity") .addQueryParam("Signature", "Y4Ac4sZfBemGZmgfG78F7IX+IFg=") .addHeader("Host", "container.s3.amazonaws.com") .addHeader("Date", DATE).build(); }
public void testAddBase64AndUrlEncodedQueryParams() { String base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; URI uri = URI.create("http://goo.com:443?header1=" + Strings2.urlEncode(base64Chars)); HttpRequest request = HttpRequest.builder() .method("GET") .endpoint(uri) .addQueryParam("header2", base64Chars) .build(); assertEquals( request.getRequestLine(), "GET http://goo.com:443?header1=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%2B/%3D&header2=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%2B/%3D HTTP/1.1"); }
@Override protected HttpRequest putBlobWithTime() { return HttpRequest.builder().method("PUT") .endpoint("http://localhost/container/name") .addQueryParam("Expires", "1212683902") .addQueryParam("AWSAccessKeyId", "identity") .addQueryParam("Signature", "genkB2vLxe3AWV/bPvRTMqQts7E=") .addHeader("Expect", "100-continue") .build(); }
@Override protected HttpRequest getBlobWithTime() { return HttpRequest.builder().method("GET") .endpoint("http://localhost/container/name") .addQueryParam("Expires", "1212683902") .addQueryParam("AWSAccessKeyId", "identity") .addQueryParam("Signature", "Y4Ac4sZfBemGZmgfG78F7IX+IFg=") .build(); }
public void testListCookbooksInEnvironmentWithNumVersionReturnsEmptySetOn404() { ChefApi api = requestSendsResponse( signed(getHttpRequestBuilder("GET", "/environments/dev/cookbooks").addQueryParam("num_versions", "2").build()), HttpResponse.builder().statusCode(404).build()); Set<CookbookDefinition> cookbooks = api.listCookbooksInEnvironment("dev", "2"); assertTrue(cookbooks.isEmpty(), String.format("Expected cookbooks to be empty but was: %s", cookbooks)); }
@Override protected HttpRequest putBlob() { return HttpRequest.builder().method("PUT") .endpoint("http://localhost/container/name") .addQueryParam("Expires", "1212684799") .addQueryParam("AWSAccessKeyId", "identity") .addQueryParam("Signature", "N3+nS6ogzOqgT+YaThFN6RU/+xs=") .addHeader("Expect", "100-continue") .build(); }
@Override protected HttpRequest putBlobWithTime() { return HttpRequest.builder().method("PUT") .endpoint("https://container.s3.amazonaws.com/name") .addQueryParam("Expires", "1212683902") .addQueryParam("AWSAccessKeyId", "identity") .addQueryParam("Signature", "genkB2vLxe3AWV/bPvRTMqQts7E=") .addHeader("Expect", "100-continue") .addHeader("Host", "container.s3.amazonaws.com") .addHeader("Date", DATE) .build(); }
public void testSearchRolesWithOptionsReturnsEmptyResult() { ChefApi api = requestSendsResponse( signed(getHttpRequestBuilder("GET", "/search/role").addQueryParam("q", "name:dummy").build()), HttpResponse.builder().statusCode(200) .payload(payloadFromResourceWithContentType("/search_role_empty.json", MediaType.APPLICATION_JSON)) // .build()); SearchOptions options = SearchOptions.Builder.query("name:dummy"); SearchResult<? extends Role> result = api.searchRoles(options); assertTrue(result.isEmpty(), String.format("Expected search result to be empty but was: %s", result)); }
@VisibleForTesting HttpRequest addQueryParamsToRequest(HttpRequest request, String accessKeyId, String signature, String lang) { Multimap<String, String> decodedParams = queryParser().apply(request.getEndpoint().getRawQuery()); Builder<?> builder = request.toBuilder().endpoint(request.getEndpoint()).method(request.getMethod()); if (!decodedParams.containsKey("Version")) { builder.addQueryParam(RequestParameters.VERSION, apiVersion); } builder.addQueryParam(RequestParameters.LOCALE, lang).addQueryParam(RequestParameters.ACCESS_KEY_ID, accessKeyId) .addQueryParam(RequestParameters.SIGNATURE, signature); return builder.build(); }
@SuppressWarnings("unchecked") @Override public <R extends HttpRequest> R bindToRequest(R request, Object payload) { NextRecord from = NextRecord.class.cast(payload); Builder<?> builder = request.toBuilder(); builder.addQueryParam("name", from.getName()); if (from.getType().isPresent()) builder.addQueryParam("type", from.getType().get()); if (from.getIdentifier().isPresent()) builder.addQueryParam("identifier", from.getIdentifier().get()); return (R) builder.build(); } }
public void testAddingBase64EncodedQueryParamCausingPlusToUrlEncodedSpaceConversion() { String base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; URI uri = URI .create("http://goo.com:443?header1=valueWithUrlEncoded%2BPlus"); HttpRequest request = HttpRequest.builder().method("GET").endpoint(uri) // addQueryParam invocation causes %2B's in prev. params to // convert to %20. .addQueryParam("header2", base64Chars).build(); assertEquals( request.getRequestLine(), "GET http://goo.com:443?header1=valueWithUrlEncoded%20Plus&header2=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%20/%3D HTTP/1.1"); }
public void testAddBase64EncodedQueryParamWithNewlines() { String base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ\nabcdefghijklmnopqrstuvwxyz\n0123456789%2B/="; URI uri = URI.create("http://goo.com:443?header1=value1"); HttpRequest request = HttpRequest.builder().method("GET").endpoint(uri) .addQueryParam("header2", base64Chars).build(); assertEquals( request.getRequestLine(), "GET http://goo.com:443?header1=value1&header2=ABCDEFGHIJKLMNOPQRSTUVWXYZ%0Aabcdefghijklmnopqrstuvwxyz%0A0123456789%2B/%3D HTTP/1.1"); } }