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:15 UTC

[2/8] jclouds git commit: JCLOUDS-660: Atmos portable container ACLs

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();
+      }
    }
 }