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,