module Jeff
Jeff
mixes in client behaviour for Amazon Web Services (AWS) that require Signature
version 2 authentication.
Constants
- VERSION
Attributes
aws_access_key_id[W]
aws_endpoint[RW]
aws_secret_access_key[W]
Public Class Methods
included(base)
click to toggle source
Calls superclass method
# File lib/jeff.rb, line 91 def self.included(base) base.extend(ClassMethods) # Common parameters required by all AWS requests. # # Add other common parameters using `Jeff.params` if required in your # implementation. base.params( 'AWSAccessKeyId' => -> { aws_access_key_id }, 'SignatureVersion' => '2', 'SignatureMethod' => 'HmacSHA256', 'Timestamp' => -> { Time.now.utc.iso8601 } ) super end
Public Instance Methods
aws_access_key_id()
click to toggle source
# File lib/jeff.rb, line 121 def aws_access_key_id @aws_access_key_id || ENV['AWS_ACCESS_KEY_ID'] end
aws_secret_access_key()
click to toggle source
# File lib/jeff.rb, line 125 def aws_secret_access_key @aws_secret_access_key || ENV['AWS_SECRET_ACCESS_KEY'] end
connection()
click to toggle source
A reusable HTTP connection.
# File lib/jeff.rb, line 109 def connection @connection ||= Excon.new(aws_endpoint, connection_params) end
connection_params()
click to toggle source
# File lib/jeff.rb, line 113 def connection_params @connection_params ||= default_connection_params end
proxy=(url)
click to toggle source
# File lib/jeff.rb, line 129 def proxy=(url) connection_params.store(:proxy, url) end
Private Instance Methods
add_md5_digest(options)
click to toggle source
# File lib/jeff.rb, line 156 def add_md5_digest(options) return unless options.key?(:body) md5 = Content.new(options[:body]).md5 query = options[:query] ||= {} query.store('ContentMD5Value', md5) end
default_connection_params()
click to toggle source
# File lib/jeff.rb, line 148 def default_connection_params { headers: { 'User-Agent' => self.class.user_agent }, expects: 200, omit_default_port: true } end
default_query_values()
click to toggle source
# File lib/jeff.rb, line 186 def default_query_values self.class.params .reduce({}) do |qv, (k, v)| v = v.respond_to?(:call) ? instance_exec(&v) : v # Ignore keys with nil values v.nil? ? qv : qv.update(k => v) end end
move_query_to_body(options)
click to toggle source
# File lib/jeff.rb, line 178 def move_query_to_body(options) return if options[:body] options[:headers] ||= {} options[:headers].store('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8') options.store(:body, options.delete(:query)) end
sign(options)
click to toggle source
# File lib/jeff.rb, line 164 def sign(options) # Build query string. query_values = default_query_values.merge(options.fetch(:query, {})) query_string = Query.new(query_values).to_s # Generate signature. signature = Signer .new(options[:method], connection.data[:host], options[:path] || connection.data[:path], query_string) .sign_with(aws_secret_access_key) # Append escaped signature to query. options.store(:query, "#{query_string}&Signature=#{Utils.escape(signature)}") end