1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
import urllib
import urlparse
def mk_header_no_token(app_info):
s = 'OAuth oauth_version="1.0", oauth_signature_method="PLAINTEXT"'
s += ', oauth_consumer_key="%s"' % (urllib.quote_plus(app_info.key),)
s += ', oauth_signature="%s&"' % (urllib.quote_plus(app_info.secret),)
return s
def mk_header_with_token(app_info, token):
s = 'OAuth oauth_version="1.0", oauth_signature_method="PLAINTEXT"'
s += ', oauth_consumer_key="%s"' % (urllib.quote_plus(app_info.key),)
s += ', oauth_token="%s"' % (urllib.quote_plus(token.key),)
s += ', oauth_signature="%s&%s"' % (urllib.quote_plus(app_info.secret), urllib.quote_plus(token.secret))
return s
def parse_token(body):
params = urlparse.parse_qs(body, strict_parsing=True)
key = expect_exactly_one(params, 'oauth_token')
secret = expect_exactly_one(params, 'oauth_token_secret')
return Token(key, secret)
def expect_exactly_one(params, param_name):
l = params.get(param_name)
if l is None: raise ValueError("missing %r parameter" % (param_name,))
if len(l) != 1: raise ValueError("more than one %r parameter" % (param_name,))
return l[0]
class AppInfo(object):
def __init__(self, key, secret):
self.key = key
self.secret = secret
def __str__(self):
return "%r %r" % (self.key, self.secret,)
class Token(object):
def __init__(self, key, secret):
self.key = key
self.secret = secret
def __str__(self):
return "%r %r" % (self.key, self.secret,)
|