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);