Skip to content

Commit 5b727ed

Browse files
fix: double encoding of array parameters in signature base
1 parent 69284d7 commit 5b727ed

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

lib/oauth1/helper.rb

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,28 @@ def initialize(method, url, params, options)
2626

2727
def signature_base
2828
@url_params.delete(:oauth_signature)
29-
[@method, @url.to_s, url_with_params.query].map{|v| CGI.escape(v) }.join('&')
29+
30+
# Convert parameters to array of [key, value] pairs
31+
pairs = @url_params.flat_map do |key, value|
32+
if value.is_a?(Array)
33+
# For arrays, create multiple pairs with the same key
34+
value.map { |v| [key.to_s, v.to_s] }
35+
else
36+
[[key.to_s, value.to_s]]
37+
end
38+
end
39+
40+
# Sort first by key, then by value
41+
normalized_params = pairs.sort.map { |k, v| "#{escape(k)}=#{escape(v)}" }.join('&')
42+
43+
# Create base string
44+
[@method, escape(@url.to_s), escape(normalized_params)].join('&')
3045
end
3146

47+
# Use a single consistent escaping method
48+
def escape(value)
49+
CGI.escape(value.to_s).gsub('+', '%20')
50+
end
3251

3352
def full_url
3453
append_signature_to_params

0 commit comments

Comments
 (0)