Sha256: 09c410a5c7a4bfd8a8885b306498fd22b3dac1a6bbe3feba55c87c13ba472b44
Contents?: true
Size: 1.64 KB
Versions: 1
Compression:
Stored size: 1.64 KB
Contents
require 'aws' require 'log4r' require 'net/http' require 'uri' module VagrantPlugins module S3Auth module Util S3_HOST_MATCHER = /^((?<bucket>[[:alnum:]\-\.]+).)?s3([[:alnum:]\-\.]+)?\.amazonaws\.com$/ LOCATION_TO_REGION = Hash.new { |_, key| key }.merge( nil => 'us-east-1', 'EU' => 'eu-west-1' ) def self.s3_object_for(url, follow_redirect = true) url = URI(url) if url.scheme == 's3' bucket = url.host key = url.path[1..-1] raise Errors::MalformedShorthandURLError, url: url unless bucket && key elsif match = S3_HOST_MATCHER.match(url.host) components = url.path.split('/').delete_if(&:empty?) bucket = match['bucket'] || components.shift key = components.join('/') end if bucket && key ::AWS::S3.new(region: get_bucket_region(bucket)) .buckets[bucket].objects[key] elsif follow_redirect response = Net::HTTP.get_response(url) rescue nil if response.is_a?(Net::HTTPRedirection) s3_object_for(response['location'], false) end end end def self.s3_url_for(method, s3_object) s3_object.url_for(method, expires: 10, signature_version: :v4, force_path_style: true) end def self.get_bucket_region(bucket) LOCATION_TO_REGION[::AWS::S3.new.buckets[bucket].location_constraint] rescue ::AWS::S3::Errors::AccessDenied raise Errors::BucketLocationAccessDeniedError, bucket: bucket, access_key: ENV['AWS_ACCESS_KEY_ID'] end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
vagrant-s3auth-1.0.3 | lib/vagrant-s3auth/util.rb |