File tree Expand file tree Collapse file tree 4 files changed +59
-22
lines changed
Expand file tree Collapse file tree 4 files changed +59
-22
lines changed Original file line number Diff line number Diff line change 3030 - RSpec ~ > 3.13
3131 - Rake ~ > 13.0
3232 - Rest-Client ~ > 2.1
33+ - Remove implicit ActiveSupport requirement from runtime
3334 - Typhoeus ~ > 1.4
3435
3536# 2.6.0 (2025-01-18)
Original file line number Diff line number Diff line change @@ -2,6 +2,7 @@ module ApiAuth
22 # Builds the canonical string given a request object.
33 class Headers
44 include RequestDrivers
5+ include Helpers
56
67 # Mapping of request class patterns to their driver classes
78 REQUEST_DRIVER_MAPPING = [
@@ -83,7 +84,10 @@ def canonical_string(override_method = nil, headers_to_sign = [])
8384 @request . timestamp ]
8485
8586 if headers_to_sign . is_a? ( Array ) && headers_to_sign . any?
86- headers_to_sign . each { |h | canonical_array << headers [ h ] if headers [ h ] . present? }
87+ headers_to_sign . each do |header_name |
88+ header_value = headers [ header_name ]
89+ canonical_array << header_value if value_present? ( header_value )
90+ end
8791 end
8892
8993 canonical_array . join ( ',' )
@@ -122,11 +126,7 @@ def sign_header(header)
122126 private
123127
124128 def parse_uri ( uri )
125- parsed_uri = URI . parse ( uri )
126-
127- return parsed_uri . request_uri if parsed_uri . respond_to? ( :request_uri )
128-
129- uri . empty? ? '/' : uri
129+ canonical_request_uri ( uri )
130130 end
131131 end
132132end
Original file line number Diff line number Diff line change 1+ require 'uri'
2+
13module ApiAuth
24 module Helpers # :nodoc:
35 def b64_encode ( string )
@@ -18,5 +20,54 @@ def capitalize_keys(hsh)
1820 hsh . each_pair { |k , v | capitalized_hash [ k . to_s . upcase ] = v }
1921 capitalized_hash
2022 end
23+
24+ def value_blank? ( value )
25+ case value
26+ when nil , false
27+ true
28+ when String , Array , Hash
29+ value . empty?
30+ else
31+ value . respond_to? ( :empty? ) ? value . empty? : false
32+ end
33+ end
34+
35+ def value_present? ( value )
36+ !value_blank? ( value )
37+ end
38+
39+ def canonical_request_uri ( base_url , additional_query = nil )
40+ base = base_url . to_s
41+ return '/' if base . empty?
42+
43+ uri = URI . parse ( base )
44+ merged_query = merge_query_strings ( uri . query , normalize_query_component ( additional_query ) )
45+ uri . query = merged_query if value_present? ( merged_query )
46+
47+ result = uri . respond_to? ( :request_uri ) ? uri . request_uri : uri . to_s
48+ value_present? ( result ) ? result : '/'
49+ rescue URI ::InvalidURIError
50+ '/'
51+ end
52+
53+ private
54+
55+ def merge_query_strings ( *queries )
56+ combined = queries . compact . map ( &:to_s ) . reject ( &:empty? ) . join ( '&' )
57+ combined . empty? ? nil : combined
58+ end
59+
60+ def normalize_query_component ( component )
61+ case component
62+ when nil
63+ nil
64+ when String
65+ component . empty? ? nil : component
66+ when Hash
67+ component . empty? ? nil : URI . encode_www_form ( component )
68+ else
69+ component . to_s
70+ end
71+ end
2172 end
2273end
Original file line number Diff line number Diff line change @@ -55,17 +55,7 @@ def original_uri
5555 end
5656
5757 def request_uri
58- url = ( @request . base_url || '' ) . to_s
59- return '/' if url . empty?
60-
61- uri = URI . parse ( url )
62- merged_query = merge_query ( uri . query , params_query )
63- uri . query = merged_query unless merged_query . nil?
64-
65- path = uri . request_uri
66- path . nil? || path . empty? ? '/' : path
67- rescue URI ::InvalidURIError
68- '/'
58+ canonical_request_uri ( @request . base_url , params_query )
6959 end
7060
7161 def set_date
@@ -116,11 +106,6 @@ def params_query
116106 end
117107 end
118108
119- def merge_query ( existing , additional )
120- segments = [ existing , additional ] . compact . reject ( &:empty? )
121- segments . empty? ? nil : segments . join ( '&' )
122- end
123-
124109 def headers_hash
125110 @request . options [ :headers ] ||= { }
126111 end
You can’t perform that action at this time.
0 commit comments