summaryrefslogtreecommitdiffstats
path: root/oauth_helper.py
blob: 7d7644cbf97a2f2c5958b63f21261bedfba98d72 (plain) (blame)
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,)