Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 6f4c31f

Browse files
committed
allow for the same parameter name to appear more than once in the querystring
1 parent 7e73de1 commit 6f4c31f

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

oauth2/__init__.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -470,11 +470,11 @@ def get_normalized_parameters(self):
470470
query = urlparse.urlparse(self.url)[4]
471471

472472
url_items = self._split_url_string(query).items()
473-
url_items = [(to_utf8(k), to_utf8(v)) for k, v in url_items if k != 'oauth_signature' ]
473+
url_items = [(to_utf8(k), to_utf8_optional_iterator(v)) for k, v in url_items if k != 'oauth_signature' ]
474474
items.extend(url_items)
475475

476476
items.sort()
477-
encoded_str = urllib.urlencode(items)
477+
encoded_str = urllib.urlencode(items, True)
478478
# Encode signature parameters per Oauth Core 1.0 protocol
479479
# spec draft 7, section 3.6
480480
# (http://tools.ietf.org/html/draft-hammer-oauth-07#section-3.6)
@@ -608,7 +608,10 @@ def _split_url_string(param_str):
608608
"""Turn URL string into parameters."""
609609
parameters = parse_qs(param_str.encode('utf-8'), keep_blank_values=True)
610610
for k, v in parameters.iteritems():
611-
parameters[k] = urllib.unquote(v[0])
611+
if len(v) == 1:
612+
parameters[k] = urllib.unquote(v[0])
613+
else:
614+
parameters[k] = sorted([urllib.unquote(s) for s in v])
612615
return parameters
613616

614617

tests/test_oauth.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,19 @@ def test_get_normalized_parameters_duplicate(self):
575575

576576
self.assertEquals(expected, res)
577577

578+
def test_get_normalized_parameters_multiple(self):
579+
580+
url = "http://example.com/v2/search/videos?oauth_nonce=79815175&oauth_timestamp=1295397962&oauth_consumer_key=mykey&oauth_signature_method=HMAC-SHA1&oauth_version=1.0&offset=10&oauth_signature=spWLI%2FGQjid7sQVd5%2FarahRxzJg%3D&tag=one&tag=two"
581+
expected='oauth_consumer_key=mykey&oauth_nonce=79815175&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1295397962&oauth_version=1.0&offset=10&tag=one&tag=two'
582+
583+
req = oauth.Request("GET", url)
584+
585+
res = req.get_normalized_parameters()
586+
587+
self.assertEquals(expected, res)
588+
589+
590+
578591
def test_get_normalized_parameters_from_url(self):
579592
# example copied from
580593
# https://github.com/ciaranj/node-oauth/blob/master/tests/oauth.js

0 commit comments

Comments
 (0)