lib/ey-hmac.rb in ey-hmac-2.3.0 vs lib/ey-hmac.rb in ey-hmac-2.3.1

- old
+ new

@@ -1,101 +1,102 @@ -require "ey-hmac/version" +# frozen_string_literal: true +require 'ey-hmac/version' + require 'base64' require 'digest/md5' require 'openssl' require 'time' -module Ey - module Hmac - Error = Class.new(StandardError) +module Ey::Hmac + Error = Class.new(StandardError) - MissingSecret = Class.new(Error) - MissingAuthorization = Class.new(Error) - SignatureMismatch = Class.new(Error) - ExpiredHmac = Class.new(Error) + MissingSecret = Class.new(Error) + MissingAuthorization = Class.new(Error) + SignatureMismatch = Class.new(Error) + ExpiredHmac = Class.new(Error) - autoload :Adapter, "ey-hmac/adapter" - autoload :Faraday, "ey-hmac/faraday" - autoload :Rack, "ey-hmac/rack" + autoload :Adapter, 'ey-hmac/adapter' + autoload :Faraday, 'ey-hmac/faraday' + autoload :Rack, 'ey-hmac/rack' - def self.default_adapter=(default_adapter) - @default_adapter = default_adapter - end + def self.default_adapter=(default_adapter) + @default_adapter = default_adapter + end - def self.default_adapter - @default_adapter ||= if defined?(::Rack) || defined?(::Rails) - Ey::Hmac::Adapter::Rack - elsif defined?(::Faraday) - Ey::Hmac::Adapter::Faraday - end - end + def self.default_adapter + @default_adapter ||= if defined?(::Rack) || defined?(::Rails) + Ey::Hmac::Adapter::Rack + elsif defined?(::Faraday) + Ey::Hmac::Adapter::Faraday + end + end - # Signs request by calculating signature and adding it to the specified header - # @example - # Ey::Hmac.sign!(env, @key_id, @key_secret) - # - # @see Ey::Hmac::Adapter#sign! - # - # @param request [Hash] request environment - # @option options [Ey::Hmac::Adapter] :adapter (#{default_adapter}) adapter to sign request with - # @option options [Integer] :version (nil) signature version - # @option options [String] :authorization_header ('Authorization') Authorization header key. - # @option options [String] :service ('EyHmac') service name prefixed to {Ey::Hmac::Adapter#authorization} - # - # @return [String] authorization signature - def self.sign!(request, key_id, key_secret, options={}) - adapter = options[:adapter] || Ey::Hmac.default_adapter + # Signs request by calculating signature and adding it to the specified header + # @example + # Ey::Hmac.sign!(env, @key_id, @key_secret) + # + # @see Ey::Hmac::Adapter#sign! + # + # @param request [Hash] request environment + # @option options [Ey::Hmac::Adapter] :adapter (#{default_adapter}) adapter to sign request with + # @option options [Integer] :version (nil) signature version + # @option options [String] :authorization_header ('Authorization') Authorization header key. + # @option options [String] :service ('EyHmac') service name prefixed to {Ey::Hmac::Adapter#authorization} + # + # @return [String] authorization signature + def self.sign!(request, key_id, key_secret, options = {}) + adapter = options[:adapter] || Ey::Hmac.default_adapter - raise ArgumentError, "Missing adapter and Ey::Hmac.default_adapter" unless adapter + raise ArgumentError, 'Missing adapter and Ey::Hmac.default_adapter' unless adapter - adapter.new(request, options).sign!(key_id, key_secret) - end + adapter.new(request, options).sign!(key_id, key_secret) + end - # @example - # Ey::Hmac.authenticated? do |key_id| - # @consumer = Consumer.where(auth_id: key_id).first - # @consumer && @consumer.auth_key - # end - # - # @see Ey::Hmac::Adapter#authenticated? - # @see Ey::Hmac#authenticate! - # - # @param request [Hash] request environment - # @option options [Ey::Hmac::Adapter] :adapter ({#default_adapter}) adapter to verify request with - # @yieldparam key_id [String] public HMAC key - # - # @return [Boolean] success of authentication - def self.authenticated?(request, options={}, &block) - adapter = options[:adapter] || Ey::Hmac.default_adapter + # @example + # Ey::Hmac.authenticated? do |key_id| + # @consumer = Consumer.where(auth_id: key_id).first + # @consumer && @consumer.auth_key + # end + # + # @see Ey::Hmac::Adapter#authenticated? + # @see Ey::Hmac#authenticate! + # + # @param request [Hash] request environment + # @option options [Ey::Hmac::Adapter] :adapter ({#default_adapter}) adapter to verify request with + # @yieldparam key_id [String] public HMAC key + # + # @return [Boolean] success of authentication + def self.authenticated?(request, options = {}, &block) + adapter = options[:adapter] || Ey::Hmac.default_adapter - raise ArgumentError, "Missing adapter and Ey::Hmac.default_adapter" unless adapter + raise ArgumentError, 'Missing adapter and Ey::Hmac.default_adapter' unless adapter - adapter.new(request, options).authenticated?(&block) - end + adapter.new(request, options).authenticated?(&block) + end - # Check {Ey::Hmac::Adapter#authorization_signature} against calculated {Ey::Hmac::Adapter#signature} - # @example - # Ey::Hmac.authenticate! do |key_id| - # @consumer = Consumer.where(auth_id: key_id).first - # @consumer && @consumer.auth_key - # end - # - # @see Ey::Hmac::Adapter#authenticate! - # - # @param request [Hash] request environment - # @yieldparam key_id [String] public HMAC key - # @option options [Ey::Hmac::Adapter] :adapter ({#default_adapter}) adapter to verify request with - # - # @raise [SignatureMismatch] if the value of {Ey::Hmac::Adapter#authorization_signature} does not match {Ey::Hmac::Adapter#signature} - # @raise [MissingSecret] if the block does not return a private key matching +key_id+ - # @raise [MissingAuthorization] if the value of {Ey::Hmac::Adapter#authorization_signature} is nil - # @return [TrueClass] if authentication was successful - def self.authenticate!(request, options={}, &block) - adapter = options[:adapter] || Ey::Hmac.default_adapter + # Check {Ey::Hmac::Adapter#authorization_signature} against calculated {Ey::Hmac::Adapter#signature} + # @example + # Ey::Hmac.authenticate! do |key_id| + # @consumer = Consumer.where(auth_id: key_id).first + # @consumer && @consumer.auth_key + # end + # + # @see Ey::Hmac::Adapter#authenticate! + # + # @param request [Hash] request environment + # @yieldparam key_id [String] public HMAC key + # @option options [Ey::Hmac::Adapter] :adapter ({#default_adapter}) adapter to verify request with + # + # @raise [SignatureMismatch] if the value of {Ey::Hmac::Adapter#authorization_signature} does not + # match {Ey::Hmac::Adapter#signature} + # @raise [MissingSecret] if the block does not return a private key matching +key_id+ + # @raise [MissingAuthorization] if the value of {Ey::Hmac::Adapter#authorization_signature} is nil + # @return [TrueClass] if authentication was successful + def self.authenticate!(request, options = {}, &block) + adapter = options[:adapter] || Ey::Hmac.default_adapter - raise ArgumentError, "Missing adapter and Ey::Hmac.default_adapter" unless adapter + raise ArgumentError, 'Missing adapter and Ey::Hmac.default_adapter' unless adapter - adapter.new(request, options).authenticate!(&block) - end + adapter.new(request, options).authenticate!(&block) end end