X-Git-Url: https://jfr.im/git/z_archive/twitter.git/blobdiff_plain/568331a954966fe0a980523b98f5195cc1026c5c..b621300b6be21c7d07909b82c3f0319f546731e4:/twitter/oauth.py diff --git a/twitter/oauth.py b/twitter/oauth.py index 61b771d..ed15492 100644 --- a/twitter/oauth.py +++ b/twitter/oauth.py @@ -8,9 +8,33 @@ import hashlib import hmac -# An OAuth implementation with various helpers... +def write_token_file(filename, oauth_token, oauth_token_secret): + """ + Write a token file to hold the oauth token and oauth token secret. + """ + oauth_file = open(filename, 'w') + print >> oauth_file, oauth_token + print >> oauth_file, oauth_token_secret + oauth_file.close() + +def read_token_file(filename): + """ + Read a token file and return the oauth token and oauth token secret. + """ + f = open(filename) + return f.readline().strip(), f.readline().strip() + + class OAuth(Auth): + """ + An OAuth authenticator. + """ def __init__(self, token, token_secret, consumer_key, consumer_secret): + """ + Create the authenticator. If you are in the initial stages of + the OAuth dance and don't yet have a token or token_secret, + pass empty strings for these params. + """ self.token = token self.token_secret = token_secret self.consumer_key = consumer_key @@ -19,7 +43,9 @@ class OAuth(Auth): def encode_params(self, base_url, method, params): params = params.copy() - params['oauth_token'] = self.token + if self.token: + params['oauth_token'] = self.token + params['oauth_consumer_key'] = self.consumer_key params['oauth_signature_method'] = 'HMAC-SHA1' params['oauth_version'] = '1.0' @@ -32,9 +58,9 @@ class OAuth(Auth): message = '&'.join( urllib.quote(i, '') for i in [method.upper(), base_url, enc_params]) - - signature = hmac.new(key, message, hashlib.sha1 - ).digest().encode('base64')[:-1] + + signature = hmac.new( + key, message, hashlib.sha1).digest().encode('base64')[:-1] return enc_params + "&" + "oauth_signature=" + urllib.quote(signature, '') def generate_headers(self): @@ -48,7 +74,7 @@ def urlencode_noplus(query): if hasattr(query,"items"): # mapping objects query = query.items() - + encoded_bits = [] for n, v in query: # and do unicode here while we are at it...