From 051e8c0c5ece9f24fb14854f1fd2ecdb564aaf44 Mon Sep 17 00:00:00 2001 From: Michael Linderman Date: Tue, 22 Feb 2011 10:13:00 -0800 Subject: [PATCH 1/3] [aws|storage] Add get/put bucket policy support --- lib/fog/storage/aws.rb | 2 + .../storage/requests/aws/get_bucket_policy.rb | 37 +++++++++++++++++++ .../storage/requests/aws/put_bucket_policy.rb | 30 +++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 lib/fog/storage/requests/aws/get_bucket_policy.rb create mode 100644 lib/fog/storage/requests/aws/put_bucket_policy.rb diff --git a/lib/fog/storage/aws.rb b/lib/fog/storage/aws.rb index 8ca6c5840..b501848d3 100644 --- a/lib/fog/storage/aws.rb +++ b/lib/fog/storage/aws.rb @@ -24,6 +24,7 @@ module Fog request :get_bucket_location request :get_bucket_logging request :get_bucket_object_versions + request :get_bucket_policy request :get_bucket_versioning request :get_bucket_website request :get_object @@ -40,6 +41,7 @@ module Fog request :put_bucket request :put_bucket_acl request :put_bucket_logging + request :put_bucket_policy request :put_bucket_versioning request :put_bucket_website request :put_object diff --git a/lib/fog/storage/requests/aws/get_bucket_policy.rb b/lib/fog/storage/requests/aws/get_bucket_policy.rb new file mode 100644 index 000000000..da95d2cb8 --- /dev/null +++ b/lib/fog/storage/requests/aws/get_bucket_policy.rb @@ -0,0 +1,37 @@ +module Fog + module AWS + class Storage + class Real + + # Get bucket policy for an S3 bucket + # + # ==== Parameters + # * bucket_name<~String> - name of bucket to get policy for + # + # ==== Returns + # * response<~Excon::Response>: + # * body<~Hash> - policy document + # + # ==== See Also + # http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketGETpolicy.html + + def get_bucket_policy(bucket_name) + unless bucket_name + raise ArgumentError.new('bucket_name is required') + end + response = request({ + :expects => 200, + :headers => {}, + :host => "#{bucket_name}.#{@host}", + :idempotent => true, + :method => 'GET', + :query => {'policy' => nil} + }) + response.body = JSON.parse(response.body) unless response.body.nil? + end + + end + + end + end +end diff --git a/lib/fog/storage/requests/aws/put_bucket_policy.rb b/lib/fog/storage/requests/aws/put_bucket_policy.rb new file mode 100644 index 000000000..77e542995 --- /dev/null +++ b/lib/fog/storage/requests/aws/put_bucket_policy.rb @@ -0,0 +1,30 @@ +module Fog + module AWS + class Storage + class Real + + # Change bucket policy for an S3 bucket + # + # ==== Parameters + # * bucket_name<~String> - name of bucket to modify + # * policy<~Hash> - policy document + # + # ==== See Also + # http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketPUTpolicy.html + + def put_bucket_policy(bucket_name, policy) + request({ + :body => policy.to_json, + :expects => 204, + :headers => {}, + :host => "#{bucket_name}.#{@host}", + :method => 'PUT', + :query => {'policy' => nil} + }) + end + + end + end + end +end + From 218e57b3384063f42ad28515c8f3de363f1a1f11 Mon Sep 17 00:00:00 2001 From: Michael Linderman Date: Wed, 23 Feb 2011 11:16:22 -0800 Subject: [PATCH 2/3] [aws|storage] Add options argument to delete_object to set headers --- lib/fog/storage/requests/aws/delete_object.rb | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/fog/storage/requests/aws/delete_object.rb b/lib/fog/storage/requests/aws/delete_object.rb index b4e7d72d0..3ee67874e 100644 --- a/lib/fog/storage/requests/aws/delete_object.rb +++ b/lib/fog/storage/requests/aws/delete_object.rb @@ -16,10 +16,11 @@ module Fog # ==== See Also # http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectDELETE.html - def delete_object(bucket_name, object_name) - request({ + def delete_object(bucket_name, object_name, options = {}) + headers = options + request({ :expects => 204, - :headers => {}, + :headers => headers, :host => "#{bucket_name}.#{@host}", :idempotent => true, :method => 'DELETE', @@ -31,7 +32,7 @@ module Fog class Mock # :nodoc:all - def delete_object(bucket_name, object_name) + def delete_object(bucket_name, object_name, options = {}) response = Excon::Response.new if bucket = @data[:buckets][bucket_name] response.status = 204 From f24b523f9c407d9bc1e159e007d7de6a023bb077 Mon Sep 17 00:00:00 2001 From: Michael Linderman Date: Wed, 23 Feb 2011 13:57:51 -0800 Subject: [PATCH 3/3] [aws|storage] Add delete bucket policy --- lib/fog/storage/aws.rb | 1 + .../requests/aws/delete_bucket_policy.rb | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 lib/fog/storage/requests/aws/delete_bucket_policy.rb diff --git a/lib/fog/storage/aws.rb b/lib/fog/storage/aws.rb index b501848d3..540ebb128 100644 --- a/lib/fog/storage/aws.rb +++ b/lib/fog/storage/aws.rb @@ -17,6 +17,7 @@ module Fog request :complete_multipart_upload request :copy_object request :delete_bucket + request :delete_bucket_policy request :delete_bucket_website request :delete_object request :get_bucket diff --git a/lib/fog/storage/requests/aws/delete_bucket_policy.rb b/lib/fog/storage/requests/aws/delete_bucket_policy.rb new file mode 100644 index 000000000..90cf9de77 --- /dev/null +++ b/lib/fog/storage/requests/aws/delete_bucket_policy.rb @@ -0,0 +1,32 @@ +module Fog + module AWS + class Storage + class Real + + # Delete policy for a bucket + # + # ==== Parameters + # * bucket_name<~String> - name of bucket to delete policy from + # + # ==== Returns + # * response<~Excon::Response>: + # * status<~Integer> - 204 + # + # ==== See Also + # http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTBucketDELETEpolicy.html + + def delete_bucket_policy(bucket_name) + request({ + :expects => 204, + :headers => {}, + :host => "#{bucket_name}.#{@host}", + :method => 'DELETE', + :query => {'policy' => nil} + }) + end + + end + + end + end +end