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 2013/07/19 03:09:54 UTC

git commit: Add --signed-url option to blob read and write

Updated Branches:
  refs/heads/master 11fbcaacd -> af428a52d


Add --signed-url option to blob read and write

This will allow future automation to script jclouds-cli and visualize
conformance of various optional features and semantic quirks.


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

Branch: refs/heads/master
Commit: af428a52d58ba543e096646a5b1fd54bd660b38b
Parents: 11fbcaa
Author: Andrew Gaul <ga...@apache.org>
Authored: Mon Jul 15 23:07:59 2013 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Jul 18 18:09:31 2013 -0700

----------------------------------------------------------------------
 .../commands/blobstore/BlobReadCommand.java     |  5 ++-
 .../blobstore/BlobStoreCommandBase.java         | 33 ++++++++++++++++++--
 .../commands/blobstore/BlobWriteCommand.java    |  6 +++-
 3 files changed, 39 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-jclouds-karaf/blob/af428a52/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobReadCommand.java
----------------------------------------------------------------------
diff --git a/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobReadCommand.java b/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobReadCommand.java
index 51dfa58..2b3d705 100644
--- a/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobReadCommand.java
+++ b/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobReadCommand.java
@@ -52,11 +52,14 @@ public class BlobReadCommand extends BlobStoreCommandWithOptions {
    @Option(name = "-d", aliases = "--display", description = "Display the content to the console", required = false, multiValued = false)
    boolean display;
 
+   @Option(name = "-S", aliases = "--signed-request", description = "Use a signed request", required = false, multiValued = false)
+   boolean signedRequest;
+
    @Override
    protected Object doExecute() throws Exception {
       BlobStore blobStore = getBlobStore();
 
-      InputSupplier<InputStream> supplier = getBlobInputStream(blobStore, containerName, blobName);
+      InputSupplier<InputStream> supplier = getBlobInputStream(blobStore, containerName, blobName, signedRequest);
 
       if (display) {
          CharStreams.copy(CharStreams.newReaderSupplier(supplier, Charsets.UTF_8), System.out);

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-karaf/blob/af428a52/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobStoreCommandBase.java
----------------------------------------------------------------------
diff --git a/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobStoreCommandBase.java b/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobStoreCommandBase.java
index d59d079..fd9d349 100644
--- a/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobStoreCommandBase.java
+++ b/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobStoreCommandBase.java
@@ -23,15 +23,19 @@ import org.apache.felix.service.command.CommandSession;
 import org.apache.karaf.shell.console.AbstractAction;
 import org.jclouds.apis.ApiMetadata;
 import org.jclouds.blobstore.BlobStore;
+import org.jclouds.blobstore.BlobStoreContext;
 import org.jclouds.blobstore.ContainerNotFoundException;
 import org.jclouds.blobstore.KeyNotFoundException;
 import org.jclouds.blobstore.domain.Blob;
 import org.jclouds.blobstore.options.PutOptions;
 import org.jclouds.blobstore.util.BlobStoreUtils;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpResponse;
 import org.jclouds.karaf.cache.BasicCacheProvider;
 import org.jclouds.karaf.cache.CacheProvider;
 import org.jclouds.karaf.core.Constants;
 import org.jclouds.providers.ProviderMetadata;
+import org.jclouds.rest.HttpClient;
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
 import org.slf4j.Logger;
@@ -120,8 +124,20 @@ public abstract class BlobStoreCommandBase extends AbstractAction {
     * @param blobName
     * @return
     */
-   public InputSupplier<InputStream> getBlobInputStream(BlobStore blobStore, String containerName, String blobName)
+   public InputSupplier<InputStream> getBlobInputStream(BlobStore blobStore, String containerName, String blobName, boolean signedRequest)
          throws Exception {
+      if (signedRequest) {
+         BlobStoreContext context = blobStore.getContext();
+         HttpRequest request = context.getSigner().signGetBlob(containerName, blobName);
+         HttpClient httpClient = context.utils().http();
+         HttpResponse response = httpClient.invoke(request);
+         int statusCode = response.getStatusCode();
+         if (statusCode != 200) {
+            throw new IOException(response.getStatusLine());
+         }
+         return response.getPayload();
+      }
+
       Blob blob = blobStore.getBlob(containerName, blobName);
       if (blob == null) {
          if (!blobStore.containerExists(containerName)) {
@@ -141,7 +157,7 @@ public abstract class BlobStoreCommandBase extends AbstractAction {
     * @param blob
     * @param options
     */
-   public void write(BlobStore blobStore, String bucket, String blobName, Blob blob, PutOptions options) throws Exception {
+   public void write(BlobStore blobStore, String bucket, String blobName, Blob blob, PutOptions options, boolean signedRequest) throws Exception {
       if (blobName.contains("/")) {
          String directory = BlobStoreUtils.parseDirectoryFromPath(blobName);
          if (!Strings.isNullOrEmpty(directory)) {
@@ -149,7 +165,18 @@ public abstract class BlobStoreCommandBase extends AbstractAction {
          }
       }
 
-      blobStore.putBlob(bucket, blob, options);
+      if (signedRequest) {
+         BlobStoreContext context = blobStore.getContext();
+         HttpRequest request = context.getSigner().signPutBlob(bucket, blob);
+         HttpClient httpClient = context.utils().http();
+         HttpResponse response = httpClient.invoke(request);
+         int statusCode = response.getStatusCode();
+         if (statusCode != 200 && statusCode != 201) {
+            throw new IOException(response.getStatusLine());
+         }
+      } else {
+         blobStore.putBlob(bucket, blob, options);
+      }
    }
 
    protected void printBlobStoreProviders(Iterable<ProviderMetadata> providers, List<BlobStore> blobStores,

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-karaf/blob/af428a52/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobWriteCommand.java
----------------------------------------------------------------------
diff --git a/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobWriteCommand.java b/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobWriteCommand.java
index 8d84fd0..490ea17 100644
--- a/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobWriteCommand.java
+++ b/commands/src/main/java/org/jclouds/karaf/commands/blobstore/BlobWriteCommand.java
@@ -55,6 +55,9 @@ public class BlobWriteCommand extends BlobStoreCommandWithOptions {
    @Option(name = "-m", aliases = "--multipart-upload", description = "Use multi-part upload", required = false, multiValued = false)
    boolean multipartUpload;
 
+   @Option(name = "-S", aliases = "--signed-request", description = "Use a signed request", required = false, multiValued = false)
+   boolean signedRequest;
+
    @Override
    protected Object doExecute() throws Exception {
       BlobStore blobStore = getBlobStore();
@@ -78,7 +81,8 @@ public class BlobWriteCommand extends BlobStoreCommandWithOptions {
       }
 
       PutOptions options = multipartUpload ? new PutOptions().multipart(true) : PutOptions.NONE;
-      write(blobStore, containerName, blobName, builder.build(), options);
+
+      write(blobStore, containerName, blobName, builder.build(), options, signedRequest);
 
       cacheProvider.getProviderCacheForType("container").put(blobStore.getContext().unwrap().getId(), containerName);
       cacheProvider.getProviderCacheForType("blob").put(blobStore.getContext().unwrap().getId(), blobName);