nacx requested changes on this pull request.
> } - + + /** + * this is an updated filter method, which decides whether the SAS or SharedKeyLite + * is used and applies the right filtering. + * ```suggestion ``` > utils.logRequest(signatureLog, request, "<<"); return request; } - + + /** + * this filter method is applied only for the cases with SAS Authentication. + * ```suggestion ``` > + containerName = parametersArray[1]; + UriBuilder endpoint = Uris.uriBuilder(storageUrl).appendPath(containerName); + if (parametersArray.length == 3) { + endpoint.appendPath(parametersArray[2]).query(credential); + } else { + endpoint.query("restype=container&" + credential); + } + return removeAuthorizationHeader( + replaceDateHeader(request.toBuilder() + .endpoint(endpoint.build()) + .build())); + } + + /** + * this is a 'standard' filter method, applied when SharedKeyLite authentication is used. + * ```suggestion ``` > HttpRequest replaceAuthorizationHeader(HttpRequest request, String > signature) { return request.toBuilder() .replaceHeader(HttpHeaders.AUTHORIZATION, "SharedKeyLite " + creds.get().identity + ":" + signature) .build(); } + + /** + * this method removes Authorisation header, since it is not needed for SAS Authentication Properly format the javadoc comment. > @@ -110,7 +164,22 @@ HttpRequest replaceDateHeader(HttpRequest request) { request = request.toBuilder().replaceHeaders(Multimaps.forMap(builder.build())).build(); return request; } - + + /** + * this is the method to parse container name and blob name from the HttpRequest. Properly format the javadoc comment and remove the blank line in the comment. > @@ -105,8 +111,13 @@ public HttpRequest signGetBlob(String container, String > name, org.jclouds.blobst return sign("GET", container, name, blob2HttpGetOptions.apply(checkNotNull(options, "options")), DEFAULT_EXPIRY_SECONDS, null, null); } - - private HttpRequest sign(String method, String container, String name, @Nullable GetOptions options, long expires, @Nullable Long contentLength, @Nullable String contentType) { + + + /** + * method to sign HttpRequest when SharedKey Authentication is used + * ```suggestion ``` > @@ -167,5 +163,61 @@ private HttpRequest sign(String method, String > container, String name, @Nullable String signature = auth.calculateSignature(stringToSign); request.addQueryParam("sig", signature); return request.build(); + + } + Remove the unnecessary blank lines > @@ -167,5 +163,61 @@ private HttpRequest sign(String method, String > container, String name, @Nullable String signature = auth.calculateSignature(stringToSign); request.addQueryParam("sig", signature); return request.build(); + ```suggestion ``` > + request.replaceHeader(HttpHeaders.CONTENT_LENGTH, > contentLength.toString()); + } + + if (contentType != null) { + request.replaceHeader("x-ms-blob-content-type", contentType); + } + + if (options != null) { + request.headers(options.buildRequestHeaders()); + } + + if (method.equals("PUT")) { + request.replaceHeader("x-ms-blob-type", "BlockBlob"); + } + return request; + ```suggestion ``` > + + if (contentType != null) { + request.replaceHeader("x-ms-blob-content-type", contentType); + } + + if (options != null) { + request.headers(options.buildRequestHeaders()); + } + + if (method.equals("PUT")) { + request.replaceHeader("x-ms-blob-type", "BlockBlob"); + } + return request; + + } + ```suggestion ``` > + + if (options != null) { + request.headers(options.buildRequestHeaders()); + } + + if (method.equals("PUT")) { + request.replaceHeader("x-ms-blob-type", "BlockBlob"); + } + return request; + + } + + + /** + * method, compatible with SAS Authentication + * ```suggestion ``` > + * method, compatible with SAS Authentication + * + */ + private HttpRequest signSAS(String method, String container, String name, @Nullable GetOptions options, long expires, @Nullable Long contentLength, @Nullable String contentType) { + checkNotNull(method, "method"); + checkNotNull(container, "container"); + checkNotNull(name, "name"); + String nowString = timeStampProvider.get(); + + HttpRequest.Builder request = HttpRequest.builder() + .method(method) + .endpoint(Uris.uriBuilder(storageUrl).appendPath(container).appendPath(name).query(this.credential).build()) + .replaceHeader(HttpHeaders.DATE, nowString); + + request = setHeaders(request, method, options, contentLength, contentType); + HttpRequest req = request.build(); Just `return request.build();` > @@ -63,6 +72,23 @@ protected final String guiceProvideTimeStamp(@TimeStamp > Supplier<String> cache) protected String provideTimeStamp(@TimeStamp Supplier<String> cache) { return cache.get(); } + + /** + * checks which Authentication type is used + * ```suggestion ``` > @@ -74,6 +74,23 @@ void testIdempotent(HttpRequest request) { System.out.printf("%s: %d iterations before the timestamp updated %n", Thread.currentThread().getName(), iterations); } + + @Test Yes. Take the idempotent test as an example. You may probably want to be able to create a filter with a SAS token credential and check that the filtered request has the expected content. Also, you need to add a new `AzureBlobHttpApiModuleTest.java` and add proper unit tests for the `authSAS` method with different credential formats as an input, to make sure it produces the right result for all variety of valid and invalid inputs. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/jclouds/jclouds/pull/1270#pullrequestreview-203598965