Underskog OAuth Klient Python

Krever oauth2 biblioteket .

# Ola Fosheim Grøstad 2012. Lisens: BSD/MIT/Apache/LGPL

import urlparse
import oauth2 as oauth

class Client(oauth.Client):
def init(self,consumer_key,consumer_secret):
oauth.Client.init(self,oauth.Consumer(consumer_key,consumer_secret))

def obtain_token(self,type):
response,content = self.request(‘http://underskog.no/oauth/%s’ % type,‘GET’)
if response[‘status’] != ‘200’:
raise Exception(‘Failed response for oauth token %s.’ % type)

d = dict(urlparse.parse_qsl(content))

key = d.get(‘oauth_token’)
secret = d.get(‘oauth_token_secret’)

if (not (key and secret)):
raise Exception(‘Invalid response for oauth %s grant.’ % type)

self.token = oauth.Token(key,secret)

return ‘oauth_callback_confirmed’ in d

def authorize_url(self):
return ‘%s?oauth_token=%s’ % (‘http://underskog.no/oauth/authorize’,self.token.key)

def get_token(self):
return self.token.to_string();

def set_token(self,tokenstring,verifier=None):
self.token = oauth.Token.from_string(tokenstring)
if verifier:
self.token.set_verifier(verifier)

def download(self,resource):
response,content = self.request(‘http://underskog.no/api/v1/’+resource)
if response[‘status’] != ‘200’:
raise Exception(‘Download of underskog resource “%s” failed.’,resource)
return content

#

  1. Pseudokode, der storage er enten (veldig) secure cookies eller session basert database
    #

client = Client(OAUTH_CONSUMER_KEY,OAUTH_CONSUMER_SECRET)

if not storage.access_token:
querytoken = httprequest.get(‘oauth_token’,default_value=None)
verifier = httprequest.get(‘oauth_verifier’,default_value=None)
request = storage.request_token
storage.request_token = None

request_ok = False

if request and verifier:
client.set_token(request,verifier)
request_ok = (client.token.key == querytoken)

if not request_ok:
client.obtain_token(‘request_token’)
storage.request_token = client.get_token()
return HttpRedirect(client.authorize_url())

client.obtain_token(‘access_token’)
storage.access_token = client.get_token();
else:
client.set_token(storage.access_token)

jsondata = client.download(‘enellerannenressurs’)

return HttpResponse(lagwebside(jsondata))