/******************************************************************************* * Licensed 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.html * This file 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. * ***************************************************************************** * * Joel Wetzel * Affirma Consulting * jwetzel@affirmaconsulting.com * */ /* Kenneth Skovhede, opensource@hexad.dk: * 20-01-2009 made class inheritable */ using System; using System.Collections.Generic; using System.Text; using Affirma.ThreeSharp.Model; using Affirma.ThreeSharp.Query; namespace Affirma.ThreeSharp.Wrapper { /// /// Wraps basic functionality of the ThreeSharp Library into single-line commands /// public class ThreeSharpWrapper { protected ThreeSharpConfig config; protected IThreeSharp service; protected ThreeSharpWrapper() { } public ThreeSharpWrapper(String awsAccessKeyId, String awsSecretAccessKey) { this.config = new ThreeSharpConfig(); this.config.AwsAccessKeyID = awsAccessKeyId; this.config.AwsSecretAccessKey = awsSecretAccessKey; this.service = new ThreeSharpQuery(this.config); } /// /// Adds a bucket to an S3 account /// public virtual void AddBucket(String bucketName) { using (BucketAddRequest bucketAddRequest = new BucketAddRequest(bucketName)) using (BucketAddResponse bucketAddResponse = this.service.BucketAdd(bucketAddRequest)) { } } /// /// Returns a string of XML, describing the contents of a bucket /// public virtual String ListBucket(String bucketName) { using (BucketListRequest bucketListRequest = new BucketListRequest(bucketName)) using (BucketListResponse bucketListResponse = this.service.BucketList(bucketListRequest)) { return bucketListResponse.StreamResponseToString(); } } /// /// Adds a string to a bucket, as an object /// public virtual void AddStringObject(String bucketName, String keyName, String data) { using (ObjectAddRequest objectAddRequest = new ObjectAddRequest(bucketName, keyName)) { objectAddRequest.LoadStreamWithString(data); using (ObjectAddResponse objectAddResponse = this.service.ObjectAdd(objectAddRequest)) { } } } /// /// Streams a file to a bucket as an object /// public virtual void AddFileObject(String bucketName, String keyName, String localfile) { using (ObjectAddRequest objectAddRequest = new ObjectAddRequest(bucketName, keyName)) { objectAddRequest.LoadStreamWithFile(localfile); using (ObjectAddResponse objectAddResponse = this.service.ObjectAdd(objectAddRequest)) { } } } /// /// Streams a file to a bucket as an object, with encryption /// public virtual void AddEncryptFileObject(String bucketName, String keyName, String localfile, String encryptionKey, String encryptionIV) { using (ObjectAddRequest objectAddRequest = new ObjectAddRequest(bucketName, keyName)) { objectAddRequest.LoadStreamWithFile(localfile); objectAddRequest.EncryptStream(encryptionKey, encryptionIV); using (ObjectAddResponse objectAddResponse = this.service.ObjectAdd(objectAddRequest)) { } } } /// /// Gets a string object from a bucket, and returns it as a String /// public virtual String GetStringObject(String bucketName, String keyName) { String stringResponse = null; using (ObjectGetRequest objectGetRequest = new ObjectGetRequest(bucketName, keyName)) using (ObjectGetResponse objectGetResponse = this.service.ObjectGet(objectGetRequest)) { stringResponse = objectGetResponse.StreamResponseToString(); } return stringResponse; } /// /// Gets a file object from a bucket, and streams it to disk /// public virtual void GetFileObject(String bucketName, String keyName, String localfile) { using (ObjectGetRequest objectGetRequest = new ObjectGetRequest(bucketName, keyName)) using (ObjectGetResponse objectGetResponse = this.service.ObjectGet(objectGetRequest)) { objectGetResponse.StreamResponseToFile(localfile); } } /// /// Gets a file object from a bucket, streaming it to disk, with decryption /// public virtual void GetDecryptFileObject(String bucketName, String keyName, String localfile, String encryptionKey, String encryptionIV) { using (ObjectGetRequest objectGetRequest = new ObjectGetRequest(bucketName, keyName)) using (ObjectGetResponse objectGetResponse = this.service.ObjectGet(objectGetRequest)) { objectGetResponse.DecryptStream(encryptionKey, encryptionIV); objectGetResponse.StreamResponseToFile(localfile); } } /// /// Copies an object from a source location to a destination location /// public virtual void CopyObject(String sourceBucketName, String sourceKey, String destinationBucketName, String destinationKey) { using (ObjectCopyRequest objectCopyRequest = new ObjectCopyRequest(sourceBucketName, sourceKey, destinationBucketName, destinationKey)) using (ObjectCopyResponse objectCopyResponse = this.service.ObjectCopy(objectCopyRequest)) { } } /// /// Generates a URL to access an S3 object in a bucket /// public virtual String GetUrl(String bucketName, String keyName) { using (UrlGetRequest urlGetRequest = new UrlGetRequest(bucketName, keyName)) { urlGetRequest.ExpiresIn = 60 * 1000; using (UrlGetResponse urlGetResponse = this.service.UrlGet(urlGetRequest)) { return urlGetResponse.StreamResponseToString(); } } } /// /// Deletes an object from a bucket /// public virtual void DeleteObject(String bucketName, String keyName) { using (ObjectDeleteRequest objectDeleteRequest = new ObjectDeleteRequest(bucketName, keyName)) using (ObjectDeleteResponse objectDeleteResponse = service.ObjectDelete(objectDeleteRequest)) { } } /// /// Deletes a bucket from an S3 account /// public virtual void DeleteBucket(String bucketName) { using (BucketDeleteRequest bucketDeleteRequest = new BucketDeleteRequest(bucketName)) using (BucketDeleteResponse bucketDeleteResponse = service.BucketDelete(bucketDeleteRequest)) { } } } }