Skip to content

Commit a06e2f5

Browse files
author
Michael S. Kazmier
committed
udpates params parsing function and adds tests
1 parent 0255255 commit a06e2f5

File tree

3 files changed

+18
-4
lines changed

3 files changed

+18
-4
lines changed

api_auth.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ Gem::Specification.new do |s|
1616
s.add_development_dependency 'actionpack', '< 6.0', '> 4.0'
1717
s.add_development_dependency 'activesupport', '< 6.0', '> 4.0'
1818
s.add_development_dependency 'activeresource', '~> 4.0'
19+
s.add_development_dependency 'rails', '~> 4.0'
1920
s.add_development_dependency 'rest-client', '~> 1.6.0'
2021
s.add_development_dependency 'curb', '~> 0.8.1'
2122
s.add_development_dependency 'httpi'

lib/api_auth/headers.rb

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,13 +94,18 @@ def sign_header(header)
9494
private
9595

9696
def parse_uri(uri)
97-
uri_without_host = uri.gsub(URI_WITHOUT_HOST_REGEXP, '')
97+
parsed_uri = URI.parse(uri)
98+
99+
uri_without_host = parsed_uri.respond_to?(:request_uri) ? parsed_uri.request_uri : uri
98100
return '/' if uri_without_host.empty?
99101
escape_params(uri_without_host)
100102
end
101103

102-
# Different version of request parsers escape/unescape the param values
103-
# This will force param values to escaped
104+
# Different versions of request parsers escape/unescape the param values
105+
# Examples:
106+
# Rails 5.1.3 ApiAuth canonical_string:'GET,application/json,,/api/v1/employees?select=epulse_id%2Cfirst_name%2Clast_name,Thu, 14 Dec 2017 16:19:48 GMT'
107+
# Rails 5.1.4 ApiAuth canonical_string:'GET,application/json,,/api/v1/employees?select=epulse_id,first_name,last_name,Thu, 14 Dec 2017 16:20:57 GMT'
108+
# This will force param values to escaped and fixes issue #123
104109
def escape_params(uri)
105110
unescaped_uri = CGI.unescape(uri)
106111
uri_array = unescaped_uri.split('?')

spec/headers_spec.rb

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,21 @@
4343
let(:uri) { 'http://google.com/?redirect_to=https://www.example.com'.freeze }
4444

4545
it 'return /?redirect_to=https://www.example.com as canonical string path' do
46-
expect(subject.canonical_string).to eq('GET,,,/?redirect_to=https://www.example.com,')
46+
expect(subject.canonical_string).to eq('GET,,,/?redirect_to=https%3A%2F%2Fwww.example.com,')
4747
end
4848

4949
it 'does not change request url (by removing host)' do
5050
expect(request.url).to eq(uri)
5151
end
5252
end
53+
54+
context 'uri has multiple params in it' do
55+
let(:uri) { 'http://google.com/search/advanced?redirect_to=https://www.example.com&account=a12dd334/3444\:23'.freeze }
56+
57+
it 'returns only query param values as escaped in url' do
58+
puts subject.canonical_string
59+
end
60+
end
5361
end
5462

5563
context 'string construction' do

0 commit comments

Comments
 (0)