You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by mc...@apache.org on 2013/06/18 18:46:12 UTC

git commit: updated refs/heads/object_store to 1eb3966

Updated Branches:
  refs/heads/object_store cf4334454 -> 1eb39665b


CLOUDSTACK-3030: Object_Store_Refactor - Download template from S3
should not set template to public-readable.

Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/1eb39665
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/1eb39665
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/1eb39665

Branch: refs/heads/object_store
Commit: 1eb39665bd802577f7d925c9703fcd0549996329
Parents: cf43344
Author: Min Chen <mi...@citrix.com>
Authored: Tue Jun 18 09:45:50 2013 -0700
Committer: Min Chen <mi...@citrix.com>
Committed: Tue Jun 18 09:45:50 2013 -0700

----------------------------------------------------------------------
 .../driver/S3ImageStoreDriverImpl.java          | 29 +++++++++-----------
 utils/src/com/cloud/utils/S3Utils.java          | 14 ++++++++++
 2 files changed, 27 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1eb39665/plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/driver/S3ImageStoreDriverImpl.java
----------------------------------------------------------------------
diff --git a/plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/driver/S3ImageStoreDriverImpl.java b/plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/driver/S3ImageStoreDriverImpl.java
index 850c42b..85547ff 100644
--- a/plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/driver/S3ImageStoreDriverImpl.java
+++ b/plugins/storage/image/s3/src/org/apache/cloudstack/storage/datastore/driver/S3ImageStoreDriverImpl.java
@@ -18,6 +18,8 @@
  */
 package org.apache.cloudstack.storage.datastore.driver;
 
+import java.net.URL;
+import java.util.Date;
 import java.util.Map;
 import javax.inject.Inject;
 
@@ -28,14 +30,12 @@ import org.apache.cloudstack.storage.image.BaseImageStoreDriverImpl;
 import org.apache.cloudstack.storage.image.store.ImageStoreImpl;
 import org.apache.log4j.Logger;
 
-import com.amazonaws.services.s3.model.CannedAccessControlList;
 import com.cloud.agent.api.to.DataStoreTO;
 import com.cloud.agent.api.to.S3TO;
 import com.cloud.configuration.Config;
 import com.cloud.configuration.dao.ConfigurationDao;
 import com.cloud.storage.Storage.ImageFormat;
 import com.cloud.utils.S3Utils;
-import com.cloud.utils.exception.CloudRuntimeException;
 
 public class S3ImageStoreDriverImpl extends  BaseImageStoreDriverImpl {
     private static final Logger s_logger = Logger.getLogger(S3ImageStoreDriverImpl.class);
@@ -74,20 +74,17 @@ public class S3ImageStoreDriverImpl extends  BaseImageStoreDriverImpl {
         // make the url accessible
         S3TO s3 = (S3TO)getStoreTO(store);
         String key = installPath;
-        try {
-            S3Utils.setObjectAcl(s3, s3.getBucketName(), key, CannedAccessControlList.PublicRead);
-        } catch (Exception ex) {
-            s_logger.error("Failed to set ACL on S3 object " + key + " to PUBLIC_READ", ex);
-            throw new CloudRuntimeException("Failed to set ACL on S3 object " + key + " to PUBLIC_READ");
-        }
-        // construct the url from s3
-        StringBuffer s3url = new StringBuffer();
-        s3url.append(s3.isHttps() ? "https://" : "http://");
-        s3url.append(s3.getEndPoint());
-        s3url.append("/");
-        s3url.append(s3.getBucketName());
-        s3url.append("/");
-        s3url.append(key);
+
+        s_logger.info("Generating pre-signed s3 entity extraction URL.");
+        Date expiration = new Date();
+        long milliSeconds = expiration.getTime();
+        milliSeconds += 1000 * 60 * 60; // expired after one hour.
+        expiration.setTime(milliSeconds);
+
+        URL s3url = S3Utils.generatePresignedUrl(s3, s3.getBucketName(), key, expiration);
+
+        s_logger.info("Pre-Signed URL = " + s3url.toString());
+
         return s3url.toString();
     }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1eb39665/utils/src/com/cloud/utils/S3Utils.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/S3Utils.java b/utils/src/com/cloud/utils/S3Utils.java
index e7817f5..0a4a443 100644
--- a/utils/src/com/cloud/utils/S3Utils.java
+++ b/utils/src/com/cloud/utils/S3Utils.java
@@ -38,7 +38,9 @@ import java.io.FileNotFoundException;
 import java.io.FilenameFilter;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.URL;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.UUID;
 
@@ -47,6 +49,7 @@ import org.apache.log4j.Logger;
 
 import com.amazonaws.AmazonClientException;
 import com.amazonaws.ClientConfiguration;
+import com.amazonaws.HttpMethod;
 import com.amazonaws.auth.AWSCredentials;
 import com.amazonaws.auth.BasicAWSCredentials;
 import com.amazonaws.services.s3.AmazonS3;
@@ -178,6 +181,17 @@ public final class S3Utils {
 
     }
 
+    public static URL generatePresignedUrl(final ClientOptions clientOptions, final String bucketName, final String key,
+            final Date expiration) {
+
+        assert clientOptions != null;
+        assert !isBlank(bucketName);
+        assert !isBlank(key);
+
+        return acquireClient(clientOptions).generatePresignedUrl(bucketName, key, expiration, HttpMethod.GET);
+
+    }
+
     // Note that whenever S3Object is returned, client code needs to close the internal stream to avoid resource leak.
     public static S3Object getObject(final ClientOptions clientOptions,
             final String bucketName, final String key) {