From 051e8c0c5ece9f24fb14854f1fd2ecdb564aaf44 Mon Sep 17 00:00:00 2001 From: Michael Linderman Date: Tue, 22 Feb 2011 10:13:00 -0800 Subject: [PATCH] [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 +