Underskog OAuth Klient Python
Krever oauth2 biblioteket .
# Ola Fosheim Grøstad 2012. Lisens: BSD/MIT/Apache/LGPLimport urlparse
import oauth2 as oauthclass 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#
- 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 = Nonerequest_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))