JCLOUDS-844: GCS putBlob ACLs
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/57d162c6 Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/57d162c6 Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/57d162c6 Branch: refs/heads/master Commit: 57d162c646b83ca69da804b95fef987b2ca352f0 Parents: 639e96d Author: Andrew Gaul <[email protected]> Authored: Mon Dec 21 23:01:01 2015 -0800 Committer: Andrew Gaul <[email protected]> Committed: Mon Dec 21 23:25:00 2015 -0800 ---------------------------------------------------------------------- .../blobstore/GoogleCloudStorageBlobStore.java | 44 ++++++++++++++------ 1 file changed, 32 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/57d162c6/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java ---------------------------------------------------------------------- diff --git a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java index 5dbb7cd..a3b22d1 100644 --- a/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java +++ b/providers/google-cloud-storage/src/main/java/org/jclouds/googlecloudstorage/blobstore/GoogleCloudStorageBlobStore.java @@ -209,15 +209,7 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore { */ @Override public String putBlob(String container, Blob blob) { - checkNotNull(blob.getPayload().getContentMetadata().getContentLength()); - HashCode md5 = blob.getMetadata().getContentMetadata().getContentMD5AsHashCode(); - - ObjectTemplate template = blobMetadataToObjectTemplate.apply(blob.getMetadata()); - - if (md5 != null) { - template.md5Hash(base64().encode(md5.asBytes())); - } - return api.getObjectApi().multipartUpload(container, template, blob.getPayload()).etag(); + return putBlob(container, blob, PutOptions.NONE); } @Override @@ -225,7 +217,25 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore { if (options.isMultipart()) { return putMultipartBlob(container, blob, options); } else { - return putBlob(container, blob); + checkNotNull(blob.getPayload().getContentMetadata().getContentLength()); + + ObjectTemplate template = blobMetadataToObjectTemplate.apply(blob.getMetadata()); + + HashCode md5 = blob.getMetadata().getContentMetadata().getContentMD5AsHashCode(); + if (md5 != null) { + template.md5Hash(base64().encode(md5.asBytes())); + } + + if (options.getBlobAccess() == BlobAccess.PUBLIC_READ) { + ObjectAccessControls controls = ObjectAccessControls.builder() + .entity("allUsers") + .bucket(container) + .role(READER) + .build(); + template.addAcl(controls); + } + + return api.getObjectApi().multipartUpload(container, template, blob.getPayload()).etag(); } } @@ -342,9 +352,9 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore { } @Override - public MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata) { + public MultipartUpload initiateMultipartUpload(String container, BlobMetadata blobMetadata, PutOptions options) { String uploadId = blobMetadata.getName(); - return MultipartUpload.create(container, blobMetadata.getName(), uploadId, blobMetadata); + return MultipartUpload.create(container, blobMetadata.getName(), uploadId, blobMetadata, options); } @Override @@ -364,7 +374,17 @@ public final class GoogleCloudStorageBlobStore extends BaseBlobStore { builder.add(api.getObjectApi().getObject(mpu.containerName(), Strings2.urlEncode(getMPUPartName(mpu, part.partNumber())))); } + ObjectTemplate destination = blobMetadataToObjectTemplate.apply(mpu.blobMetadata()); + if (mpu.putOptions().getBlobAccess() == BlobAccess.PUBLIC_READ) { + ObjectAccessControls controls = ObjectAccessControls.builder() + .entity("allUsers") + .bucket(mpu.containerName()) + .role(READER) + .build(); + destination.addAcl(controls); + } + ComposeObjectTemplate template = ComposeObjectTemplate.builder().fromGoogleCloudStorageObject(builder.build()) .destination(destination).build(); return api.getObjectApi().composeObjects(mpu.containerName(), Strings2.urlEncode(mpu.blobName()), template)
