diff --git a/lib/middleman-s3_redirect.rb b/lib/middleman-s3_redirect.rb index 6a0d48e..747bee0 100644 --- a/lib/middleman-s3_redirect.rb +++ b/lib/middleman-s3_redirect.rb @@ -1,5 +1,6 @@ require 'middleman-core' -require 'fog' +require 'fog/aws' +require 'fog/aws/storage' require 'middleman-s3_redirect/version' require 'middleman-s3_redirect/commands' diff --git a/lib/middleman-s3_redirect/extension.rb b/lib/middleman-s3_redirect/extension.rb index 3b01148..b8b76ff 100644 --- a/lib/middleman-s3_redirect/extension.rb +++ b/lib/middleman-s3_redirect/extension.rb @@ -11,13 +11,16 @@ class Options :path_style, :aws_access_key_id, :aws_secret_access_key, - :after_build + :aws_session_token, + :after_build, + :acl def initialize self.read_config self.aws_access_key_id ||= ENV['AWS_ACCESS_KEY_ID'] self.aws_secret_access_key ||= ENV['AWS_SECRET_ACCESS_KEY'] + self.aws_session_token ||= (ENV['AWS_SESSION_TOKEN'] || ENV['AWS_SECURITY_TOKEN']) end def redirect(from, to) @@ -45,6 +48,8 @@ def read_config(io = nil) self.aws_access_key_id = config["aws_access_key_id"] if config["aws_access_key_id"] self.aws_secret_access_key = config["aws_secret_access_key"] if config["aws_secret_access_key"] + self.aws_session_token = config["aws_session_token"] if config["aws_session_token"] + self.acl = config["acl"] ? config["acl"] : 'public-read' end class RedirectEntry @@ -95,22 +100,34 @@ def generate puts "Redirecting /#{redirect.from} to #{redirect.to}" bucket.files.create({ :key => redirect.from, - :public => true, - :acl => 'public-read', + :acl => options.acl, :body => '', 'x-amz-website-redirect-location' => "#{redirect.to}" - }) + }.merge(options.acl ? {} : {public: true})) end end def connection - @connection ||= Fog::Storage.new({ - :provider => 'AWS', - :aws_access_key_id => options.aws_access_key_id, - :aws_secret_access_key => options.aws_secret_access_key, + connection_options = { :region => options.region, :path_style => options.path_style - }) + } + + if options.aws_access_key_id && options.aws_secret_access_key + connection_options.merge!({ + :aws_access_key_id => options.aws_access_key_id, + :aws_secret_access_key => options.aws_secret_access_key + }) + + # If using a assumed role + connection_options.merge!({ + :aws_session_token => options.aws_session_token + }) if options.aws_session_token + else + connection_options.merge!({ :use_iam_profile => true }) + end + + @connection ||= Fog::Storage::AWS.new(connection_options) end def bucket diff --git a/middleman-s3_redirect.gemspec b/middleman-s3_redirect.gemspec index a570b44..e06bc1a 100644 --- a/middleman-s3_redirect.gemspec +++ b/middleman-s3_redirect.gemspec @@ -19,7 +19,7 @@ Gem::Specification.new do |gem| gem.add_runtime_dependency 'middleman-core', '>= 3.0.0' - gem.add_runtime_dependency 'fog', '>= 1.25.0' + gem.add_runtime_dependency 'fog-aws', '>= 0.7.0' gem.add_runtime_dependency 'parallel' gem.add_development_dependency 'rake'