You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ga...@apache.org on 2015/02/13 02:42:14 UTC
[1/8] jclouds git commit: JCLOUDS-660: Local blobstore portable
container ACLs
Repository: jclouds
Updated Branches:
refs/heads/master 3e8413335 -> fcc991fa2
JCLOUDS-660: Local blobstore portable container ACLs
Intentionally unimplemented.
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/994f84e4
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/994f84e4
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/994f84e4
Branch: refs/heads/master
Commit: 994f84e4f56e6fee744b98428094426353414ebf
Parents: 261bb7e
Author: Andrew Gaul <ga...@apache.org>
Authored: Thu Feb 12 17:09:00 2015 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Feb 12 17:26:47 2015 -0800
----------------------------------------------------------------------
.../integration/FilesystemContainerIntegrationTest.java | 6 ++++++
.../org/jclouds/blobstore/config/LocalBlobStore.java | 11 +++++++++++
.../integration/TransientContainerIntegrationTest.java | 6 ++++++
3 files changed, 23 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/994f84e4/apis/filesystem/src/test/java/org/jclouds/filesystem/integration/FilesystemContainerIntegrationTest.java
----------------------------------------------------------------------
diff --git a/apis/filesystem/src/test/java/org/jclouds/filesystem/integration/FilesystemContainerIntegrationTest.java b/apis/filesystem/src/test/java/org/jclouds/filesystem/integration/FilesystemContainerIntegrationTest.java
index 4b6cd03..005052f 100644
--- a/apis/filesystem/src/test/java/org/jclouds/filesystem/integration/FilesystemContainerIntegrationTest.java
+++ b/apis/filesystem/src/test/java/org/jclouds/filesystem/integration/FilesystemContainerIntegrationTest.java
@@ -36,6 +36,7 @@ import org.jclouds.filesystem.reference.FilesystemConstants;
import org.jclouds.filesystem.utils.TestUtils;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
+import org.testng.SkipException;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
@@ -166,4 +167,9 @@ public class FilesystemContainerIntegrationTest extends BaseContainerIntegration
return TestUtils.isWindowsOs() ? TestUtils.NO_INVOCATIONS
: TestUtils.SINGLE_NO_ARG_INVOCATION;
}
+
+ @Override
+ public void testSetContainerAccess() throws Exception {
+ throw new SkipException("Intentionally not implemented for the transient provider");
+ }
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/994f84e4/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
index d523d04..c0b9bca 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/config/LocalBlobStore.java
@@ -47,6 +47,7 @@ import org.jclouds.blobstore.LocalStorageStrategy;
import org.jclouds.blobstore.domain.Blob;
import org.jclouds.blobstore.domain.BlobBuilder;
import org.jclouds.blobstore.domain.BlobMetadata;
+import org.jclouds.blobstore.domain.ContainerAccess;
import org.jclouds.blobstore.domain.MutableBlobMetadata;
import org.jclouds.blobstore.domain.MutableStorageMetadata;
import org.jclouds.blobstore.domain.PageSet;
@@ -375,6 +376,16 @@ public final class LocalBlobStore implements BlobStore {
return storageStrategy.createContainerInLocation(name, location);
}
+ @Override
+ public ContainerAccess getContainerAccess(String container) {
+ throw new UnsupportedOperationException("not implemented");
+ }
+
+ @Override
+ public void setContainerAccess(String container, ContainerAccess access) {
+ throw new UnsupportedOperationException("not implemented");
+ }
+
private Blob loadBlob(final String container, final String key) {
logger.debug("Opening blob in container: %s - %s", container, key);
return storageStrategy.getBlob(container, key);
http://git-wip-us.apache.org/repos/asf/jclouds/blob/994f84e4/blobstore/src/test/java/org/jclouds/blobstore/integration/TransientContainerIntegrationTest.java
----------------------------------------------------------------------
diff --git a/blobstore/src/test/java/org/jclouds/blobstore/integration/TransientContainerIntegrationTest.java b/blobstore/src/test/java/org/jclouds/blobstore/integration/TransientContainerIntegrationTest.java
index bbca99d..7bbf8c3 100644
--- a/blobstore/src/test/java/org/jclouds/blobstore/integration/TransientContainerIntegrationTest.java
+++ b/blobstore/src/test/java/org/jclouds/blobstore/integration/TransientContainerIntegrationTest.java
@@ -32,6 +32,7 @@ import org.jclouds.blobstore.domain.StorageMetadata;
import org.jclouds.blobstore.integration.internal.BaseContainerIntegrationTest;
import org.jclouds.domain.Location;
import org.testng.annotations.Test;
+import org.testng.SkipException;
import com.google.common.collect.ImmutableMap;
@@ -80,4 +81,9 @@ public class TransientContainerIntegrationTest extends BaseContainerIntegrationT
created = blobStore.createContainerInLocation(location, container);
assertFalse(created);
}
+
+ @Override
+ public void testSetContainerAccess() throws Exception {
+ throw new SkipException("Intentionally not implemented for the transient provider");
+ }
}
[7/8] jclouds git commit: JCLOUDS-660: S3 portable container ACLs
Posted by ga...@apache.org.
JCLOUDS-660: S3 portable container ACLs
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/ec3f0354
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/ec3f0354
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/ec3f0354
Branch: refs/heads/master
Commit: ec3f0354873b246bd0e92553f2962b350f7f73c7
Parents: 994f84e
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri Feb 6 14:47:42 2015 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Feb 12 17:26:48 2015 -0800
----------------------------------------------------------------------
.../org/jclouds/s3/blobstore/S3BlobStore.java | 26 ++++++++++++++++++++
1 file changed, 26 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/ec3f0354/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobStore.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobStore.java b/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobStore.java
index b546cee..4d28a12 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobStore.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/blobstore/S3BlobStore.java
@@ -30,6 +30,7 @@ import org.jclouds.blobstore.BlobStoreContext;
import org.jclouds.blobstore.ContainerNotFoundException;
import org.jclouds.blobstore.domain.Blob;
import org.jclouds.blobstore.domain.BlobMetadata;
+import org.jclouds.blobstore.domain.ContainerAccess;
import org.jclouds.blobstore.domain.PageSet;
import org.jclouds.blobstore.domain.StorageMetadata;
import org.jclouds.blobstore.functions.BlobToHttpGetOptions;
@@ -130,6 +131,31 @@ public class S3BlobStore extends BaseBlobStore {
return createContainerInLocation(location, container, CreateContainerOptions.NONE);
}
+ @Override
+ public ContainerAccess getContainerAccess(String container) {
+ AccessControlList acl = sync.getBucketACL(container);
+ if (acl.hasPermission(GroupGranteeURI.ALL_USERS, Permission.READ)) {
+ return ContainerAccess.PUBLIC_READ;
+ } else {
+ return ContainerAccess.PRIVATE;
+ }
+ }
+
+ @Override
+ public void setContainerAccess(String container, ContainerAccess access) {
+ AccessControlList acl = sync.getBucketACL(container);
+ if (access == ContainerAccess.PUBLIC_READ) {
+ acl.revokePermission(GroupGranteeURI.ALL_USERS, Permission.FULL_CONTROL)
+ .revokePermission(GroupGranteeURI.ALL_USERS, Permission.WRITE)
+ .addPermission(GroupGranteeURI.ALL_USERS, Permission.READ);
+ } else if (access == ContainerAccess.PRIVATE) {
+ acl.revokePermission(GroupGranteeURI.ALL_USERS, Permission.FULL_CONTROL)
+ .revokePermission(GroupGranteeURI.ALL_USERS, Permission.READ)
+ .revokePermission(GroupGranteeURI.ALL_USERS, Permission.WRITE);
+ }
+ sync.putBucketACL(container, acl);
+ }
+
/**
* This implementation invokes {@link S3Client#listBucket}
*
[4/8] jclouds git commit: JCLOUDS-660: Legacy Swift portable
container ACLs
Posted by ga...@apache.org.
JCLOUDS-660: Legacy Swift portable container ACLs
Intentionally unimplemented.
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/261bb7ee
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/261bb7ee
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/261bb7ee
Branch: refs/heads/master
Commit: 261bb7eeceaa83264866a2fa407947e928087fe3
Parents: d701f6a
Author: Andrew Gaul <ga...@apache.org>
Authored: Thu Feb 12 17:09:45 2015 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Feb 12 17:26:47 2015 -0800
----------------------------------------------------------------------
.../openstack/swift/blobstore/SwiftBlobStore.java | 11 +++++++++++
.../integration/SwiftContainerIntegrationLiveTest.java | 5 +++++
2 files changed, 16 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/261bb7ee/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/SwiftBlobStore.java
----------------------------------------------------------------------
diff --git a/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/SwiftBlobStore.java b/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/SwiftBlobStore.java
index 1cda908..de25e03 100644
--- a/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/SwiftBlobStore.java
+++ b/apis/swift/src/main/java/org/jclouds/openstack/swift/blobstore/SwiftBlobStore.java
@@ -31,6 +31,7 @@ import javax.inject.Singleton;
import org.jclouds.blobstore.BlobStoreContext;
import org.jclouds.blobstore.domain.Blob;
import org.jclouds.blobstore.domain.BlobMetadata;
+import org.jclouds.blobstore.domain.ContainerAccess;
import org.jclouds.blobstore.domain.PageSet;
import org.jclouds.blobstore.domain.StorageMetadata;
import org.jclouds.blobstore.domain.internal.PageSetImpl;
@@ -314,4 +315,14 @@ public class SwiftBlobStore extends BaseBlobStore {
throw new UnsupportedOperationException("publicRead");
return createContainerInLocation(location, container);
}
+
+ @Override
+ public ContainerAccess getContainerAccess(String container) {
+ throw new UnsupportedOperationException("not implemented");
+ }
+
+ @Override
+ public void setContainerAccess(String container, ContainerAccess access) {
+ throw new UnsupportedOperationException("not implemented");
+ }
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/261bb7ee/apis/swift/src/test/java/org/jclouds/openstack/swift/blobstore/integration/SwiftContainerIntegrationLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/swift/src/test/java/org/jclouds/openstack/swift/blobstore/integration/SwiftContainerIntegrationLiveTest.java b/apis/swift/src/test/java/org/jclouds/openstack/swift/blobstore/integration/SwiftContainerIntegrationLiveTest.java
index e306650..b557d8c 100644
--- a/apis/swift/src/test/java/org/jclouds/openstack/swift/blobstore/integration/SwiftContainerIntegrationLiveTest.java
+++ b/apis/swift/src/test/java/org/jclouds/openstack/swift/blobstore/integration/SwiftContainerIntegrationLiveTest.java
@@ -101,4 +101,9 @@ public class SwiftContainerIntegrationLiveTest extends BaseContainerIntegrationT
// use new Swift provider instead
throw new SkipException("Intentionally not implemented for the legacy Swift provider");
}
+
+ @Override
+ public void testSetContainerAccess() throws Exception {
+ throw new SkipException("Intentionally not implemented for the legacy Swift provider");
+ }
}
[6/8] jclouds git commit: Handle removal during iteration
Posted by ga...@apache.org.
Handle removal during iteration
Previously this threw UnsupportedOperationException due to
findGrantsForGrantee returning an immutable view.
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/eacfc8fd
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/eacfc8fd
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/eacfc8fd
Branch: refs/heads/master
Commit: eacfc8fdf1afdcdca88a71301e3e783515cba636
Parents: 3e84133
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri Feb 6 14:24:11 2015 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Feb 12 17:26:47 2015 -0800
----------------------------------------------------------------------
.../main/java/org/jclouds/s3/domain/AccessControlList.java | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/eacfc8fd/apis/s3/src/main/java/org/jclouds/s3/domain/AccessControlList.java
----------------------------------------------------------------------
diff --git a/apis/s3/src/main/java/org/jclouds/s3/domain/AccessControlList.java b/apis/s3/src/main/java/org/jclouds/s3/domain/AccessControlList.java
index 7450f30..34a7366 100644
--- a/apis/s3/src/main/java/org/jclouds/s3/domain/AccessControlList.java
+++ b/apis/s3/src/main/java/org/jclouds/s3/domain/AccessControlList.java
@@ -19,6 +19,7 @@ package org.jclouds.s3.domain;
import java.net.URI;
import java.util.Collection;
import java.util.Collections;
+import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -105,10 +106,10 @@ public class AccessControlList {
* @param permission
*/
public AccessControlList revokePermission(Grantee grantee, String permission) {
- Collection<Grant> grantsForGrantee = findGrantsForGrantee(grantee.getIdentifier());
- for (Grant grant : grantsForGrantee) {
- if (grant.getPermission().equals(permission)) {
- grants.remove(grant);
+ for (Iterator<Grant> it = grants.iterator(); it.hasNext();) {
+ Grant grant = it.next();
+ if (grant.getGrantee().equals(grantee) && grant.getPermission().equals(permission)) {
+ it.remove();
}
}
return this;
[5/8] jclouds git commit: JCLOUDS-660: Azure portable container ACLs
Posted by ga...@apache.org.
JCLOUDS-660: Azure portable container ACLs
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/d701f6a1
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/d701f6a1
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/d701f6a1
Branch: refs/heads/master
Commit: d701f6a12738a46c6be752eda5da08c382ba34f4
Parents: c1549e8
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri Feb 6 15:07:43 2015 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Feb 12 17:26:47 2015 -0800
----------------------------------------------------------------------
.../azureblob/blobstore/AzureBlobStore.java | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/d701f6a1/providers/azureblob/src/main/java/org/jclouds/azureblob/blobstore/AzureBlobStore.java
----------------------------------------------------------------------
diff --git a/providers/azureblob/src/main/java/org/jclouds/azureblob/blobstore/AzureBlobStore.java b/providers/azureblob/src/main/java/org/jclouds/azureblob/blobstore/AzureBlobStore.java
index 15a3f8b..74446b3 100644
--- a/providers/azureblob/src/main/java/org/jclouds/azureblob/blobstore/AzureBlobStore.java
+++ b/providers/azureblob/src/main/java/org/jclouds/azureblob/blobstore/AzureBlobStore.java
@@ -42,6 +42,7 @@ import org.jclouds.azureblob.options.ListBlobsOptions;
import org.jclouds.blobstore.BlobStoreContext;
import org.jclouds.blobstore.domain.Blob;
import org.jclouds.blobstore.domain.BlobMetadata;
+import org.jclouds.blobstore.domain.ContainerAccess;
import org.jclouds.blobstore.domain.PageSet;
import org.jclouds.blobstore.domain.StorageMetadata;
import org.jclouds.blobstore.domain.internal.PageSetImpl;
@@ -282,4 +283,23 @@ public class AzureBlobStore extends BaseBlobStore {
createContainerOptions.withPublicAccess(PublicAccess.CONTAINER);
return sync.createContainer(container, createContainerOptions);
}
+
+ public ContainerAccess getContainerAccess(String container) {
+ PublicAccess access = sync.getPublicAccessForContainer(container);
+ if (access == PublicAccess.BLOB) {
+ return ContainerAccess.PUBLIC_READ;
+ } else {
+ return ContainerAccess.PRIVATE;
+ }
+ }
+
+ public void setContainerAccess(String container, ContainerAccess access) {
+ PublicAccess publicAccess;
+ if (access == ContainerAccess.PUBLIC_READ) {
+ publicAccess = PublicAccess.BLOB;
+ } else {
+ publicAccess = PublicAccess.PRIVATE;
+ }
+ sync.setPublicAccessForContainer(container, publicAccess);
+ }
}
[2/8] jclouds git commit: JCLOUDS-660: Atmos portable container ACLs
Posted by ga...@apache.org.
JCLOUDS-660: Atmos portable container ACLs
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/c1549e8a
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/c1549e8a
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/c1549e8a
Branch: refs/heads/master
Commit: c1549e8ae20a29096b56480b11cb9f9cdf740bae
Parents: a197958
Author: Andrew Gaul <ga...@apache.org>
Authored: Sun Feb 8 17:02:10 2015 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Feb 12 17:26:47 2015 -0800
----------------------------------------------------------------------
.../java/org/jclouds/atmos/AtmosClient.java | 8 ++++++++
.../jclouds/atmos/blobstore/AtmosBlobStore.java | 21 ++++++++++++++++++++
.../org/jclouds/atmos/filters/SignRequest.java | 7 ++++++-
.../org/jclouds/atmos/options/PutOptions.java | 11 ++++++++++
4 files changed, 46 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/c1549e8a/apis/atmos/src/main/java/org/jclouds/atmos/AtmosClient.java
----------------------------------------------------------------------
diff --git a/apis/atmos/src/main/java/org/jclouds/atmos/AtmosClient.java b/apis/atmos/src/main/java/org/jclouds/atmos/AtmosClient.java
index 458ed96..b4bd698 100644
--- a/apis/atmos/src/main/java/org/jclouds/atmos/AtmosClient.java
+++ b/apis/atmos/src/main/java/org/jclouds/atmos/AtmosClient.java
@@ -175,4 +175,12 @@ public interface AtmosClient extends Closeable {
@Fallback(FalseOnNotFoundOr404.class)
boolean isPublic(@PathParam("path") String path);
+ @Named("SetObjectMetadata")
+ @POST
+ @Path("/{path}")
+ @QueryParams(keys = "acl")
+ @Produces(MediaType.APPLICATION_OCTET_STREAM)
+ @Fallback(ThrowKeyNotFoundOn404.class)
+ @Consumes(MediaType.WILDCARD)
+ void setGroupAcl(@PathParam("path") String path, PutOptions options);
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/c1549e8a/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosBlobStore.java
----------------------------------------------------------------------
diff --git a/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosBlobStore.java b/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosBlobStore.java
index fd6b2bc..b7a2bcc 100644
--- a/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosBlobStore.java
+++ b/apis/atmos/src/main/java/org/jclouds/atmos/blobstore/AtmosBlobStore.java
@@ -36,6 +36,7 @@ import org.jclouds.atmos.util.AtmosUtils;
import org.jclouds.blobstore.BlobStoreContext;
import org.jclouds.blobstore.domain.Blob;
import org.jclouds.blobstore.domain.BlobMetadata;
+import org.jclouds.blobstore.domain.ContainerAccess;
import org.jclouds.blobstore.domain.PageSet;
import org.jclouds.blobstore.domain.StorageMetadata;
import org.jclouds.blobstore.functions.BlobToHttpGetOptions;
@@ -118,6 +119,26 @@ public class AtmosBlobStore extends BaseBlobStore {
return sync.createDirectory(container) != null;
}
+ @Override
+ public ContainerAccess getContainerAccess(String container) {
+ if (sync.isPublic(container)) {
+ return ContainerAccess.PUBLIC_READ;
+ } else {
+ return ContainerAccess.PRIVATE;
+ }
+ }
+
+ @Override
+ public void setContainerAccess(String container, ContainerAccess access) {
+ org.jclouds.atmos.options.PutOptions options = new org.jclouds.atmos.options.PutOptions();
+ if (access == ContainerAccess.PUBLIC_READ) {
+ options.publicRead();
+ } else {
+ options.publicNone();
+ }
+ sync.setGroupAcl(container, options);
+ }
+
/**
* This implementation invokes {@link AtmosClient#createDirectory}
*
http://git-wip-us.apache.org/repos/asf/jclouds/blob/c1549e8a/apis/atmos/src/main/java/org/jclouds/atmos/filters/SignRequest.java
----------------------------------------------------------------------
diff --git a/apis/atmos/src/main/java/org/jclouds/atmos/filters/SignRequest.java b/apis/atmos/src/main/java/org/jclouds/atmos/filters/SignRequest.java
index 388b15c..7c3486e 100644
--- a/apis/atmos/src/main/java/org/jclouds/atmos/filters/SignRequest.java
+++ b/apis/atmos/src/main/java/org/jclouds/atmos/filters/SignRequest.java
@@ -177,7 +177,12 @@ public class SignRequest implements HttpRequestFilter {
@VisibleForTesting
void appendCanonicalizedResource(HttpRequest request, StringBuilder toSign) {
// Path portion of the HTTP request URI, in lowercase.
- toSign.append(request.getEndpoint().getRawPath().toLowerCase()).append("\n");
+ toSign.append(request.getEndpoint().getRawPath().toLowerCase());
+ String query = request.getEndpoint().getRawQuery();
+ if (query != null) {
+ toSign.append("?").append(query);
+ }
+ toSign.append("\n");
}
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/c1549e8a/apis/atmos/src/main/java/org/jclouds/atmos/options/PutOptions.java
----------------------------------------------------------------------
diff --git a/apis/atmos/src/main/java/org/jclouds/atmos/options/PutOptions.java b/apis/atmos/src/main/java/org/jclouds/atmos/options/PutOptions.java
index c49f04a..a0bdded 100644
--- a/apis/atmos/src/main/java/org/jclouds/atmos/options/PutOptions.java
+++ b/apis/atmos/src/main/java/org/jclouds/atmos/options/PutOptions.java
@@ -47,6 +47,12 @@ public class PutOptions extends BaseHttpRequestOptions {
return this;
}
+ public PutOptions publicNone() {
+ this.replaceHeader("x-emc-useracl", "root=FULL_CONTROL");
+ this.replaceHeader("x-emc-groupacl", "other=NONE");
+ return this;
+ }
+
public static class Builder {
/**
@@ -56,5 +62,10 @@ public class PutOptions extends BaseHttpRequestOptions {
PutOptions options = new PutOptions();
return options.publicRead();
}
+
+ public static PutOptions publicNone() {
+ PutOptions options = new PutOptions();
+ return options.publicNone();
+ }
}
}
[8/8] jclouds git commit: JCLOUDS-660: Swift portable container ACLs
Posted by ga...@apache.org.
JCLOUDS-660: Swift portable container ACLs
Not implemented for legacy Swift.
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/fcc991fa
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/fcc991fa
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/fcc991fa
Branch: refs/heads/master
Commit: fcc991fa22ef3c27344532495b14b3ce6530295c
Parents: ec3f035
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri Feb 6 19:26:37 2015 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Feb 12 17:26:48 2015 -0800
----------------------------------------------------------------------
.../blobstore/RegionScopedSwiftBlobStore.java | 25 ++++++++++++++++++++
.../swift/v1/reference/SwiftHeaders.java | 1 +
2 files changed, 26 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/fcc991fa/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java
----------------------------------------------------------------------
diff --git a/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java b/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java
index 9ccc39b..6972b6e 100644
--- a/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java
+++ b/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedSwiftBlobStore.java
@@ -34,6 +34,7 @@ import org.jclouds.blobstore.BlobStoreContext;
import org.jclouds.blobstore.domain.Blob;
import org.jclouds.blobstore.domain.BlobBuilder;
import org.jclouds.blobstore.domain.BlobMetadata;
+import org.jclouds.blobstore.domain.ContainerAccess;
import org.jclouds.blobstore.domain.MutableBlobMetadata;
import org.jclouds.blobstore.domain.PageSet;
import org.jclouds.blobstore.domain.StorageMetadata;
@@ -59,6 +60,8 @@ import org.jclouds.openstack.swift.v1.domain.Container;
import org.jclouds.openstack.swift.v1.domain.ObjectList;
import org.jclouds.openstack.swift.v1.domain.SwiftObject;
import org.jclouds.openstack.swift.v1.features.ObjectApi;
+import org.jclouds.openstack.swift.v1.options.UpdateContainerOptions;
+import org.jclouds.openstack.swift.v1.reference.SwiftHeaders;
import com.google.common.base.Function;
import com.google.common.base.Optional;
@@ -68,6 +71,7 @@ import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableSet;
import com.google.common.io.ByteSource;
import com.google.inject.AbstractModule;
@@ -139,6 +143,27 @@ public class RegionScopedSwiftBlobStore implements BlobStore {
return api.getContainerApi(regionId).create(container, BASIC_CONTAINER);
}
+ @Override
+ public ContainerAccess getContainerAccess(String name) {
+ Container container = api.getContainerApi(regionId).get(name);
+ if (container.getAnybodyRead().get()) {
+ return ContainerAccess.PUBLIC_READ;
+ } else {
+ return ContainerAccess.PRIVATE;
+ }
+ }
+
+ @Override
+ public void setContainerAccess(String name, ContainerAccess access) {
+ UpdateContainerOptions options = new UpdateContainerOptions();
+ if (access == ContainerAccess.PUBLIC_READ) {
+ options.anybodyRead();
+ } else {
+ options.headers(ImmutableMultimap.of(SwiftHeaders.CONTAINER_READ, SwiftHeaders.CONTAINER_ACL_PRIVATE));
+ }
+ api.getContainerApi(regionId).update(name, options);
+ }
+
private static final org.jclouds.openstack.swift.v1.options.CreateContainerOptions BASIC_CONTAINER = new org.jclouds.openstack.swift.v1.options.CreateContainerOptions();
private static final org.jclouds.openstack.swift.v1.options.CreateContainerOptions ANYBODY_READ = new org.jclouds.openstack.swift.v1.options.CreateContainerOptions()
.anybodyRead();
http://git-wip-us.apache.org/repos/asf/jclouds/blob/fcc991fa/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/reference/SwiftHeaders.java
----------------------------------------------------------------------
diff --git a/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/reference/SwiftHeaders.java b/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/reference/SwiftHeaders.java
index caab5e7..23c61c0 100644
--- a/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/reference/SwiftHeaders.java
+++ b/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/reference/SwiftHeaders.java
@@ -49,6 +49,7 @@ public final class SwiftHeaders {
public static final String CONTAINER_READ = "X-Container-Read";
public static final String CONTAINER_WRITE = "X-Container-Write";
public static final String CONTAINER_ACL_ANYBODY_READ = ".r:*,.rlistings";
+ public static final String CONTAINER_ACL_PRIVATE = "";
// CORS
public static final String CONTAINER_ACCESS_CONTROL_ALLOW_ORIGIN = CONTAINER_METADATA_PREFIX + "Access-Control-Allow-Origin";
[3/8] jclouds git commit: JCLOUDS-660: portable container ACLs
Posted by ga...@apache.org.
JCLOUDS-660: portable container ACLs
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/a1979580
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/a1979580
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/a1979580
Branch: refs/heads/master
Commit: a19795800a88e8977eb425ecc77d887fb319d353
Parents: eacfc8f
Author: Andrew Gaul <ga...@apache.org>
Authored: Fri Feb 6 10:42:40 2015 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Feb 12 17:26:47 2015 -0800
----------------------------------------------------------------------
.../java/org/jclouds/blobstore/BlobStore.java | 5 ++++
.../blobstore/domain/ContainerAccess.java | 25 ++++++++++++++++++++
.../internal/BaseContainerIntegrationTest.java | 19 +++++++++++++++
3 files changed, 49 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/a1979580/blobstore/src/main/java/org/jclouds/blobstore/BlobStore.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/BlobStore.java b/blobstore/src/main/java/org/jclouds/blobstore/BlobStore.java
index 1889c35..8ecc0c1 100644
--- a/blobstore/src/main/java/org/jclouds/blobstore/BlobStore.java
+++ b/blobstore/src/main/java/org/jclouds/blobstore/BlobStore.java
@@ -21,6 +21,7 @@ import java.util.Set;
import org.jclouds.blobstore.domain.Blob;
import org.jclouds.blobstore.domain.BlobBuilder;
import org.jclouds.blobstore.domain.BlobMetadata;
+import org.jclouds.blobstore.domain.ContainerAccess;
import org.jclouds.blobstore.domain.PageSet;
import org.jclouds.blobstore.domain.StorageMetadata;
import org.jclouds.blobstore.options.CreateContainerOptions;
@@ -91,6 +92,10 @@ public interface BlobStore {
*/
boolean createContainerInLocation(@Nullable Location location, String container, CreateContainerOptions options);
+ ContainerAccess getContainerAccess(String container);
+
+ void setContainerAccess(String container, ContainerAccess access);
+
/**
* Lists all resources in a container non-recursive.
*
http://git-wip-us.apache.org/repos/asf/jclouds/blob/a1979580/blobstore/src/main/java/org/jclouds/blobstore/domain/ContainerAccess.java
----------------------------------------------------------------------
diff --git a/blobstore/src/main/java/org/jclouds/blobstore/domain/ContainerAccess.java b/blobstore/src/main/java/org/jclouds/blobstore/domain/ContainerAccess.java
new file mode 100644
index 0000000..67dbe79
--- /dev/null
+++ b/blobstore/src/main/java/org/jclouds/blobstore/domain/ContainerAccess.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.jclouds.blobstore.domain;
+
+public enum ContainerAccess {
+ /** Only allow bucket owner to read and write objects. */
+ PRIVATE,
+ /** Allow all users to read objects but only allow owner to write objects. */
+ PUBLIC_READ;
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/a1979580/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java
----------------------------------------------------------------------
diff --git a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java
index 41542e4..732e350 100644
--- a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java
+++ b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseContainerIntegrationTest.java
@@ -37,8 +37,10 @@ import java.util.concurrent.TimeoutException;
import javax.ws.rs.core.MediaType;
+import org.jclouds.blobstore.BlobStore;
import org.jclouds.blobstore.domain.Blob;
import org.jclouds.blobstore.domain.BlobMetadata;
+import org.jclouds.blobstore.domain.ContainerAccess;
import org.jclouds.blobstore.domain.PageSet;
import org.jclouds.blobstore.domain.StorageMetadata;
import org.jclouds.blobstore.options.ListContainerOptions;
@@ -475,6 +477,23 @@ public class BaseContainerIntegrationTest extends BaseBlobStoreIntegrationTest {
}
}
+ @Test(groups = { "integration", "live" })
+ public void testSetContainerAccess() throws Exception {
+ BlobStore blobStore = view.getBlobStore();
+ String containerName = getContainerName();
+ try {
+ assertThat(blobStore.getContainerAccess(containerName)).isEqualTo(ContainerAccess.PRIVATE);
+
+ blobStore.setContainerAccess(containerName, ContainerAccess.PUBLIC_READ);
+ assertThat(blobStore.getContainerAccess(containerName)).isEqualTo(ContainerAccess.PUBLIC_READ);
+
+ blobStore.setContainerAccess(containerName, ContainerAccess.PRIVATE);
+ assertThat(blobStore.getContainerAccess(containerName)).isEqualTo(ContainerAccess.PRIVATE);
+ } finally {
+ recycleContainerAndAddToPool(containerName);
+ }
+ }
+
protected void addAlphabetUnderRoot(String containerName) throws InterruptedException {
for (char letter = 'a'; letter <= 'z'; letter++) {
view.getBlobStore().putBlob(containerName,