Skip to content

Commit c773302

Browse files
committed
Merge branch 'master' of [email protected]:simplegeo/python-oauth2
2 parents df158fc + 340584e commit c773302

File tree

3 files changed

+119
-62
lines changed

3 files changed

+119
-62
lines changed

oauth2/__init__.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import hmac
3030
import binascii
3131
import httplib2
32+
from types import ListType
3233

3334
try:
3435
from urlparse import parse_qs, parse_qsl
@@ -309,7 +310,10 @@ def to_header(self, realm=''):
309310

310311
def to_postdata(self):
311312
"""Serialize as post data for a POST request."""
312-
return urllib.urlencode(self)
313+
# tell urlencode to deal with sequence values and map them correctly
314+
# to resulting querystring. for example self["k"] = ["v1", "v2"] will
315+
# result in 'k=v1&k=v2' and not k=%5B%27v1%27%2C+%27v2%27%5D
316+
return urllib.urlencode(self, True)
313317

314318
def to_url(self):
315319
"""Serialize as a URL for a GET request."""
@@ -324,8 +328,9 @@ def get_parameter(self, parameter):
324328

325329
def get_normalized_parameters(self):
326330
"""Return a string that contains the parameters that must be signed."""
327-
items = [(k, v) for k, v in self.items() if k != 'oauth_signature']
328-
encoded_str = urllib.urlencode(sorted(items))
331+
# 1.0a/9.1.1 states that kvp must be sorted by key, then by value
332+
items = [(k, v if type(v) != ListType else sorted(v)) for k,v in sorted(self.items()) if k != 'oauth_signature']
333+
encoded_str = urllib.urlencode(items, True)
329334
# Encode signature parameters per Oauth Core 1.0 protocol
330335
# spec draft 7, section 3.6
331336
# (http://tools.ietf.org/html/draft-hammer-oauth-07#section-3.6)
@@ -580,7 +585,7 @@ def request(self, uri, method="GET", body=None, headers=None,
580585
parameters = dict(parse_qsl(body))
581586
elif method == "GET":
582587
parsed = urlparse.urlparse(uri)
583-
parameters = parse_qs(parsed.query)
588+
parameters = parse_qsl(parsed.query)
584589
else:
585590
parameters = None
586591

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from setuptools import setup, find_packages
44

55
setup(name="oauth2",
6-
version="1.0.2",
6+
version="1.0.7",
77
description="Library for OAuth version 1.0a.",
88
author="Joe Stump",
99
author_email="[email protected]",

0 commit comments

Comments
 (0)