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

Skip to content

Commit 6d5256c

Browse files
committed
Added a multitude of tests.
1 parent 35aba71 commit 6d5256c

File tree

2 files changed

+307
-48
lines changed

2 files changed

+307
-48
lines changed

oauth/__init__.py

Lines changed: 47 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,6 @@ def escape(s):
5858
return urllib.quote(s, safe='~')
5959

6060

61-
def _utf8_str(s):
62-
"""Convert unicode to utf-8."""
63-
if isinstance(s, unicode):
64-
return s.encode("utf-8")
65-
else:
66-
return str(s)
67-
68-
6961
def generate_timestamp():
7062
"""Get seconds since epoch (UTC)."""
7163
return int(time.time())
@@ -280,15 +272,15 @@ def get_nonoauth_parameters(self):
280272

281273
def to_header(self, realm=''):
282274
"""Serialize as a header for an HTTPAuth request."""
283-
oauth_params = ((k, v) for k, v in self.iteritems()
275+
oauth_params = ((k, v) for k, v in self.items()
284276
if k.startswith('oauth_'))
285277
stringy_params = ((k, escape(str(v))) for k, v in oauth_params)
286278
header_params = ('%s="%s"' % (k, v) for k, v in stringy_params)
287279
params_header = ', '.join(header_params)
288280

289281
auth_header = 'OAuth realm="%s"' % realm
290282
if params_header:
291-
auth_header += params_header
283+
auth_header = "%s, %s" % (auth_header, params_header)
292284

293285
return {'Authorization': auth_header}
294286

@@ -306,7 +298,7 @@ def get_normalized_parameters(self):
306298
return urllib.urlencode(sorted(items))
307299

308300
def sign_request(self, signature_method, consumer, token):
309-
"""Set the signature parameter to the result of build_signature."""
301+
"""Set the signature parameter to the result of sign."""
310302
self['oauth_signature_method'] = signature_method.name
311303
self['oauth_signature'] = signature_method.sign(self, consumer, token)
312304

@@ -338,7 +330,7 @@ def from_request(cls, http_method, http_url, headers=None, parameters=None,
338330
header_params = cls._split_header(auth_header)
339331
parameters.update(header_params)
340332
except:
341-
raise OAuthError('Unable to parse OAuth parameters from '
333+
raise Error('Unable to parse OAuth parameters from '
342334
'Authorization header.')
343335

344336
# GET or POST query string.
@@ -375,12 +367,12 @@ def from_consumer_and_token(cls, oauth_consumer, token=None,
375367
if token:
376368
parameters['oauth_token'] = token.key
377369

378-
return OAuthRequest(http_method, http_url, parameters)
370+
return Request(http_method, http_url, parameters)
379371

380372
@classmethod
381373
def from_token_and_callback(cls, token, callback=None,
382-
http_method=HTTP_METHOD,
383-
http_url=None, parameters=None):
374+
http_method=HTTP_METHOD, http_url=None, parameters=None):
375+
384376
if not parameters:
385377
parameters = {}
386378

@@ -448,7 +440,7 @@ def get_data_store(self):
448440
return self.data_store
449441

450442
def add_signature_method(self, signature_method):
451-
self.signature_methods[signature_method.get_name()] = signature_method
443+
self.signature_methods[signature_method.name] = signature_method
452444
return self.signature_methods
453445

454446
def fetch_request_token(self, oauth_request):
@@ -573,13 +565,13 @@ def _check_signature(self, oauth_request, consumer, token):
573565
token, signature)
574566

575567
if not valid_sig:
576-
key, base = signature_method.build_signature_base_string(
568+
key, base = signature_method.signing_base(
577569
oauth_request, consumer, token)
578570

579571
raise Error('Invalid signature. Expected signature base '
580572
'string: %s' % base)
581573

582-
built = signature_method.build_signature(oauth_request,
574+
built = signature_method.sign(oauth_request,
583575
consumer, token)
584576

585577
def _check_timestamp(self, timestamp):
@@ -672,34 +664,45 @@ class SignatureMethod(object):
672664
provide a new way to sign requests.
673665
"""
674666

675-
def get_name(self):
676-
"""-> str."""
677-
raise NotImplementedError
667+
def signing_base(self, request, consumer, token):
668+
"""Calculates the string that needs to be signed.
669+
670+
This method returns a 2-tuple containing the starting key for the
671+
signing and the message to be signed. The latter may be used in error
672+
messages to help clients debug their software.
678673
679-
def build_signature_base_string(self, oauth_request,
680-
oauth_consumer, oauth_token):
681-
"""-> str key, str raw."""
674+
"""
682675
raise NotImplementedError
683676

684-
def build_signature(self, oauth_request, oauth_consumer, oauth_token):
685-
"""-> str."""
677+
def sign(self, request, consumer, token):
678+
"""Returns the signature for the given request, based on the consumer
679+
and token also provided.
680+
681+
You should use your implementation of `signing_base()` to build the
682+
message to sign. Otherwise it may be less useful for debugging.
683+
684+
"""
686685
raise NotImplementedError
687686

688-
def check_signature(self, oauth_request, consumer, token, signature):
689-
built = self.build_signature(oauth_request, consumer, token)
687+
def check(self, request, consumer, token, signature):
688+
"""Returns whether the given signature is the correct signature for
689+
the given consumer and token signing the given request."""
690+
built = self.sign(request, consumer, token)
690691
return built == signature
691692

693+
build_signature_base_string = signing_base
694+
build_signature = sign
695+
check_signature = check
696+
692697

693698
class SignatureMethod_HMAC_SHA1(SignatureMethod):
694-
695-
def get_name(self):
696-
return 'HMAC-SHA1'
699+
name = 'HMAC-SHA1'
697700

698-
def build_signature_base_string(self, oauth_request, consumer, token):
701+
def signing_base(self, request, consumer, token):
699702
sig = (
700-
escape(oauth_request.get_normalized_http_method()),
701-
escape(oauth_request.get_normalized_http_url()),
702-
escape(oauth_request.get_normalized_parameters()),
703+
escape(request.method),
704+
escape(request.url),
705+
escape(request.get_normalized_parameters()),
703706
)
704707

705708
key = '%s&' % escape(consumer.secret)
@@ -708,10 +711,9 @@ def build_signature_base_string(self, oauth_request, consumer, token):
708711
raw = '&'.join(sig)
709712
return key, raw
710713

711-
def build_signature(self, oauth_request, consumer, token):
714+
def sign(self, request, consumer, token):
712715
"""Builds the base signature string."""
713-
key, raw = self.build_signature_base_string(oauth_request, consumer,
714-
token)
716+
key, raw = self.signing_base(request, consumer, token)
715717

716718
# HMAC object.
717719
try:
@@ -724,23 +726,21 @@ def build_signature(self, oauth_request, consumer, token):
724726
# Calculate the digest base 64.
725727
return binascii.b2a_base64(hashed.digest())[:-1]
726728

727-
728729
class SignatureMethod_PLAINTEXT(SignatureMethod):
729730

730-
def get_name(self):
731-
return 'PLAINTEXT'
731+
name = 'PLAINTEXT'
732732

733-
def build_signature_base_string(self, oauth_request, consumer, token):
734-
"""Concatenates the consumer key and secret."""
733+
def signing_base(self, request, consumer, token):
734+
"""Concatenates the consumer key and secret with the token's
735+
secret."""
735736
sig = '%s&' % escape(consumer.secret)
736737
if token:
737738
sig = sig + escape(token.secret)
738739
return sig, sig
739740

740-
def build_signature(self, oauth_request, consumer, token):
741-
key, raw = self.build_signature_base_string(oauth_request, consumer,
742-
token)
743-
return key
741+
def sign(self, request, consumer, token):
742+
key, raw = self.signing_base(request, consumer, token)
743+
return raw
744744

745745
# Backwards compatibility
746746
OAuthError = Error

0 commit comments

Comments
 (0)