lib/api_auth/headers.rb in api-auth-2.2.1 vs lib/api_auth/headers.rb in api-auth-2.3.0

- old
+ new

@@ -24,10 +24,12 @@ if defined?(ActionDispatch) ActionDispatchRequest.new(request) else ActionControllerRequest.new(request) end + when /Grape::Request/ + GrapeRequest.new(request) when /ActionDispatch::Request/ ActionDispatchRequest.new(request) when /ActionController::CgiRequest/ ActionControllerRequest.new(request) when /HTTPI::Request/ @@ -38,28 +40,37 @@ HttpRequest.new(request) end return new_request if new_request return RackRequest.new(request) if request.is_a?(Rack::Request) + raise UnknownHTTPRequest, "#{request.class} is not yet supported." end private :initialize_request_driver # Returns the request timestamp def timestamp @request.timestamp end - def canonical_string(override_method = nil) + def canonical_string(override_method = nil, headers_to_sign = []) request_method = override_method || @request.http_method raise ArgumentError, 'unable to determine the http method from the request, please supply an override' if request_method.nil? - [request_method.upcase, - @request.content_type, - @request.content_md5, - parse_uri(@request.original_uri || @request.request_uri), - @request.timestamp].join(',') + headers = @request.fetch_headers + + canonical_array = [request_method.upcase, + @request.content_type, + @request.content_md5, + parse_uri(@request.original_uri || @request.request_uri), + @request.timestamp] + + if headers_to_sign.is_a?(Array) && headers_to_sign.any? + headers_to_sign.each { |h| canonical_array << headers[h] if headers[h].present? } + end + + canonical_array.join(',') end # Returns the authorization header from the request's headers def authorization_header @request.authorization_header