# File lib/fog/aws/storage.rb, line 255 def self.acls(type) case type when 'private' { "AccessControlList" => [ { "Permission" => "FULL_CONTROL", "Grantee" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"} } ], "Owner" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"} } when 'public-read' { "AccessControlList" => [ { "Permission" => "FULL_CONTROL", "Grantee" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"} }, { "Permission" => "READ", "Grantee" => {"URI" => "http://acs.amazonaws.com/groups/global/AllUsers"} } ], "Owner" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"} } when 'public-read-write' { "AccessControlList" => [ { "Permission" => "FULL_CONTROL", "Grantee" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"} }, { "Permission" => "READ", "Grantee" => {"URI" => "http://acs.amazonaws.com/groups/global/AllUsers"} }, { "Permission" => "WRITE", "Grantee" => {"URI" => "http://acs.amazonaws.com/groups/global/AllUsers"} } ], "Owner" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"} } when 'authenticated-read' { "AccessControlList" => [ { "Permission" => "FULL_CONTROL", "Grantee" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"} }, { "Permission" => "READ", "Grantee" => {"URI" => "http://acs.amazonaws.com/groups/global/AuthenticatedUsers"} } ], "Owner" => {"DisplayName" => "me", "ID" => "2744ccd10c7533bd736ad890f9dd5cab2adb27b07d500b9493f29cdc420cb2e0"} } end end
# File lib/fog/aws/storage.rb, line 316 def self.data @data ||= Hash.new do |hash, region| hash[region] = Hash.new do |region_hash, key| region_hash[key] = { :acls => { :bucket => {}, :object => {} }, :buckets => {}, :cors => { :bucket => {} } } end end end
# File lib/fog/aws/storage.rb, line 337 def initialize(options={}) require 'mime/types' @use_iam_profile = options[:use_iam_profile] setup_credentials(options) @region = options[:region] || DEFAULT_REGION @host = options[:host] || region_to_host(@region) @scheme = options[:scheme] || DEFAULT_SCHEME end
# File lib/fog/aws/storage.rb, line 346 def data self.class.data[@region][@aws_access_key_id] end
# File lib/fog/aws/requests/storage/get_bucket_object_versions.rb, line 68 def get_bucket_object_versions(bucket_name, options = {}) delimiter, key_marker, max_keys, prefix, version_id_marker = options['delimiter'], options['key-marker'], options['max-keys'],options['prefix'],options['version-id-marker'] unless bucket_name raise ArgumentError.new('bucket_name is required') end response = Excon::Response.new # Invalid arguments. if version_id_marker && !key_marker response.status = 400 response.body = { 'Error' => { 'Code' => 'InvalidArgument', 'Message' => 'A version-id marker cannot be specified without a key marker.', 'ArgumentValue' => version_id_marker, 'RequestId' => Fog::Mock.random_hex(16), 'HostId' => Fog::Mock.random_base64(65) } } # Valid case. # TODO: (nirvdrum 12/15/11) It's not clear to me how to actually use version-id-marker, so I didn't implement it below. elsif bucket = self.data[:buckets][bucket_name] # We need to order results by S3 key, but since our data store is key => [versions], we want to ensure the integrity # of the versions as well. So, sort the keys, then fetch the versions, and then combine them all as a sorted list by # flattening the results. contents = bucket[:objects].keys.sort.collect { |key| bucket[:objects][key] }.flatten.reject do |object| (prefix && object['Key'][0...prefix.length] != prefix) || (key_marker && object['Key'] <= key_marker) || (delimiter && object['Key'][(prefix ? prefix.length : 0)..-1].include?(delimiter) && common_prefixes << object['Key'].sub(/^(#{prefix}[^#{delimiter}]+.).*/, '\1')) end.map do |object| if object.has_key?(:delete_marker) tag_name = 'DeleteMarker' extracted_attrs = ['Key', 'VersionId'] else tag_name = 'Version' extracted_attrs = ['ETag', 'Key', 'StorageClass', 'VersionId'] end data = {} data[tag_name] = object.reject { |key, value| !extracted_attrs.include?(key) } data[tag_name].merge!({ 'LastModified' => Time.parse(object['Last-Modified']), 'Owner' => bucket['Owner'], 'IsLatest' => object == bucket[:objects][object['Key']].first }) data[tag_name]['Size'] = object['Content-Length'].to_i if tag_name == 'Version' data end max_keys = max_keys || 1000 size = [max_keys, 1000].min truncated_contents = contents[0...size] response.status = 200 response.body = { 'Versions' => truncated_contents, 'IsTruncated' => truncated_contents.size != contents.size, 'KeyMarker' => key_marker, 'VersionIdMarker' => version_id_marker, 'MaxKeys' => max_keys, 'Name' => bucket['Name'], 'Prefix' => prefix } if max_keys && max_keys < response.body['Versions'].length response.body['IsTruncated'] = true response.body['Versions'] = response.body['Versions'][0...max_keys] end # Missing bucket case. else response.status = 404 response.body = { 'Error' => { 'Code' => 'NoSuchBucket', 'Message' => 'The specified bucket does not exist', 'BucketName' => bucket_name, 'RequestId' => Fog::Mock.random_hex(16), 'HostId' => Fog::Mock.random_base64(65) } } raise(Excon::Errors.status_error({:expects => 200}, response)) end response end
# File lib/fog/aws/requests/storage/get_bucket_versioning.rb, line 36 def get_bucket_versioning(bucket_name) response = Excon::Response.new bucket = self.data[:buckets][bucket_name] if bucket response.status = 200 if bucket[:versioning] response.body = { 'VersioningConfiguration' => { 'Status' => bucket[:versioning] } } else response.body = { 'VersioningConfiguration' => {} } end else response.status = 404 response.body = { 'Error' => { 'Code' => 'NoSuchBucket', 'Message' => 'The specified bucket does not exist', 'BucketName' => bucket_name, 'RequestId' => Fog::Mock.random_hex(16), 'HostId' => Fog::Mock.random_base64(65) } } raise(Excon::Errors.status_error({:expects => 200}, response)) end response end
# File lib/fog/aws/requests/storage/put_bucket_acl.rb, line 57 def put_bucket_acl(bucket_name, acl) if acl.is_a?(Hash) self.data[:acls][:bucket][bucket_name] = Fog::Storage::AWS.hash_to_acl(acl) else if !['private', 'public-read', 'public-read-write', 'authenticated-read'].include?(acl) raise Excon::Errors::BadRequest.new('invalid x-amz-acl') end self.data[:acls][:bucket][bucket_name] = acl end end
# File lib/fog/aws/requests/storage/put_bucket_cors.rb, line 42 def put_bucket_cors(bucket_name, cors) self.data[:cors][:bucket][bucket_name] = Fog::Storage::AWS.hash_to_cors(cors) end
# File lib/fog/aws/requests/storage/put_bucket_versioning.rb, line 33 def put_bucket_versioning(bucket_name, status) response = Excon::Response.new bucket = self.data[:buckets][bucket_name] if bucket if ['Enabled', 'Suspended'].include?(status) bucket[:versioning] = status response.status = 200 else response.status = 400 response.body = { 'Error' => { 'Code' => 'MalformedXML', 'Message' => 'The XML you provided was not well-formed or did not validate against our published schema', 'RequestId' => Fog::Mock.random_hex(16), 'HostId' => Fog::Mock.random_base64(65) } } raise(Excon::Errors.status_error({:expects => 200}, response)) end else response.status = 404 response.body = { 'Error' => { 'Code' => 'NoSuchBucket', 'Message' => 'The specified bucket does not exist', 'BucketName' => bucket_name, 'RequestId' => Fog::Mock.random_hex(16), 'HostId' => Fog::Mock.random_base64(65) } } raise(Excon::Errors.status_error({:expects => 200}, response)) end response end
# File lib/fog/aws/requests/storage/put_object_acl.rb, line 66 def put_object_acl(bucket_name, object_name, acl, options = {}) if acl.is_a?(Hash) self.data[:acls][:object][bucket_name][object_name] = Fog::Storage::AWS.hash_to_acl(acl) else if !['private', 'public-read', 'public-read-write', 'authenticated-read'].include?(acl) raise Excon::Errors::BadRequest.new('invalid x-amz-acl') end self.data[:acls][:object][bucket_name][object_name] = acl end end
# File lib/fog/aws/storage.rb, line 350 def reset_data self.class.data[@region].delete(@aws_access_key_id) end
# File lib/fog/aws/storage.rb, line 358 def setup_credentials(options) @aws_access_key_id = options[:aws_access_key_id] @aws_secret_access_key = options[:aws_secret_access_key] @aws_session_token = options[:aws_session_token] @aws_credentials_expire_at = options[:aws_credentials_expire_at] end
Generated with the Darkfish Rdoc Generator 2.