JCLOUDS-1400: Honor Swift signed URL content type

Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/b1886f96
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/b1886f96
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/b1886f96

Branch: refs/heads/2.1.x
Commit: b1886f96e4a7698ab3ea3832edd3f7c17ec37510
Parents: cf50e69
Author: Andrew Gaul <[email protected]>
Authored: Mon Apr 9 07:39:10 2018 -0700
Committer: Andrew Gaul <[email protected]>
Committed: Thu Apr 12 22:50:26 2018 -0700

----------------------------------------------------------------------
 .../RegionScopedTemporaryUrlBlobSigner.java     | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/b1886f96/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedTemporaryUrlBlobSigner.java
----------------------------------------------------------------------
diff --git 
a/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedTemporaryUrlBlobSigner.java
 
b/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedTemporaryUrlBlobSigner.java
index d4182d7..193e83c 100644
--- 
a/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedTemporaryUrlBlobSigner.java
+++ 
b/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedTemporaryUrlBlobSigner.java
@@ -32,11 +32,13 @@ import org.jclouds.date.TimeStamp;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.http.Uris;
 import org.jclouds.http.options.GetOptions;
+import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.location.Region;
 import org.jclouds.openstack.swift.v1.SwiftApi;
 import org.jclouds.openstack.swift.v1.TemporaryUrlSigner;
 
 import com.google.common.base.Supplier;
+import com.google.common.net.HttpHeaders;
 import com.google.inject.Inject;
 import com.google.inject.assistedinject.Assisted;
 import com.google.inject.name.Named;
@@ -70,12 +72,12 @@ public class RegionScopedTemporaryUrlBlobSigner implements 
BlobRequestSigner {
 
    @Override
    public HttpRequest signGetBlob(String container, String name, long 
timeInSeconds) {
-      return sign("GET", container, name, GetOptions.NONE, timestamp.get() + 
timeInSeconds);
+      return sign("GET", container, name, GetOptions.NONE, timestamp.get() + 
timeInSeconds, null);
    }
 
    @Override
    public HttpRequest signGetBlob(String container, String name, 
org.jclouds.blobstore.options.GetOptions options) {
-      return sign("GET", container, name, toGetOptions.apply(options), 
timestamp.get() + DEFAULT_SIGNING_TIMEOUT);
+      return sign("GET", container, name, toGetOptions.apply(options), 
timestamp.get() + DEFAULT_SIGNING_TIMEOUT, null);
    }
 
    @Override
@@ -85,26 +87,30 @@ public class RegionScopedTemporaryUrlBlobSigner implements 
BlobRequestSigner {
 
    @Override
    public HttpRequest signPutBlob(String container, Blob blob, long 
timeInSeconds) {
-      return sign("PUT", container, blob.getMetadata().getName(), 
GetOptions.NONE, timestamp.get() + timeInSeconds);
+      return sign("PUT", container, blob.getMetadata().getName(), 
GetOptions.NONE, timestamp.get() + timeInSeconds, 
blob.getMetadata().getContentMetadata().getContentType());
    }
 
    @Deprecated
    @Override
    public HttpRequest signRemoveBlob(String container, String name) {
-      return sign("DELETE", container, name, GetOptions.NONE, timestamp.get() 
+ DEFAULT_SIGNING_TIMEOUT);
+      return sign("DELETE", container, name, GetOptions.NONE, timestamp.get() 
+ DEFAULT_SIGNING_TIMEOUT, null);
    }
 
-   private HttpRequest sign(String method, String container, String name, 
GetOptions options, long expires) {
+   private HttpRequest sign(String method, String container, String name, 
GetOptions options, long expires, @Nullable String contentType) {
       checkNotNull(container, "container");
       checkNotNull(name, "name");
       URI url = 
Uris.uriBuilder(storageUrl).appendPath(container).appendPath(name).build();
       String signature = signer.sign(method, url.getPath(), expires);
-      return HttpRequest.builder()
+      HttpRequest.Builder builder = HttpRequest.builder()
                         .method(method)
                         .endpoint(url)
                         .addQueryParams(options.buildQueryParameters())
                         .addQueryParam("temp_url_sig", signature)
                         .addQueryParam("temp_url_expires", 
String.valueOf(expires))
-                        .headers(options.buildRequestHeaders()).build();
+                        .headers(options.buildRequestHeaders());
+      if (contentType != null) {
+         builder.replaceHeader(HttpHeaders.CONTENT_TYPE, contentType);
+      }
+      return builder.build();
    }
 }

Reply via email to