X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/1a949f7c97dc2f34c135f5cdf088df2927d3d652..87761a02340d63155104e92a18983e3d01c6bdbb:/forum_modules/oauthauth/consumer.py diff --git a/forum_modules/oauthauth/consumer.py b/forum_modules/oauthauth/consumer.py index 7473414..bbbaac8 100644 --- a/forum_modules/oauthauth/consumer.py +++ b/forum_modules/oauthauth/consumer.py @@ -3,10 +3,13 @@ import urllib2 import httplib import time +from forum.settings import APP_URL from forum.authentication.base import AuthenticationConsumer, InvalidAuthentication from django.utils.translation import ugettext as _ +from django.core.urlresolvers import reverse -from lib import oauth +from settings import TWITTER_AUTO_CALLBACK_REDIRECT +from lib import oauth2 class OAuthAbstractAuthConsumer(AuthenticationConsumer): @@ -14,8 +17,8 @@ class OAuthAbstractAuthConsumer(AuthenticationConsumer): self.consumer_secret = consumer_secret self.consumer_key = consumer_key - self.consumer = oauth.OAuthConsumer(consumer_key, consumer_secret) - self.signature_method = oauth.OAuthSignatureMethod_HMAC_SHA1() + self.consumer = oauth2.Consumer(consumer_key, consumer_secret) + self.signature_method = oauth2.SignatureMethod_HMAC_SHA1() self.server_url = server_url self.request_token_url = request_token_url @@ -32,12 +35,12 @@ class OAuthAbstractAuthConsumer(AuthenticationConsumer): if not unauthed_token: raise InvalidAuthentication(_('Error, the oauth token is not on the server')) - token = oauth.OAuthToken.from_string(unauthed_token) + token = oauth2.Token.from_string(unauthed_token) if token.key != request.GET.get('oauth_token', 'no-token'): raise InvalidAuthentication(_("Something went wrong! Auth tokens do not match")) - access_token = self.fetch_access_token(token) + access_token = self.fetch_access_token(token, request.GET.get('oauth_verifier', '')) return access_token.to_string() @@ -46,34 +49,44 @@ class OAuthAbstractAuthConsumer(AuthenticationConsumer): return {} def fetch_request_token(self): - oauth_request = oauth.OAuthRequest.from_consumer_and_token(self.consumer, http_url=self.request_token_url) + parameters = {} + # If the installation is configured to automatically redirect to the Twitter provider done page -- do it. + if bool(TWITTER_AUTO_CALLBACK_REDIRECT): + callback_url = '%s%s' % (APP_URL, reverse('auth_provider_done', kwargs={ 'provider' : 'twitter', })) + # Pass + parameters.update({ + 'oauth_callback' : callback_url, + }) + + oauth_request = oauth2.Request.from_consumer_and_token(self.consumer, http_url=self.request_token_url, parameters=parameters) oauth_request.sign_request(self.signature_method, self.consumer, None) - params = oauth_request.parameters + params = oauth_request data = urllib.urlencode(params) full_url='%s?%s'%(self.request_token_url, data) response = urllib2.urlopen(full_url) - return oauth.OAuthToken.from_string(response.read()) + return oauth2.Token.from_string(response.read()) def authorize_token_url(self, token, callback_url=None): - oauth_request = oauth.OAuthRequest.from_token_and_callback(token=token,\ + oauth_request = oauth2.Request.from_token_and_callback(token=token,\ callback=callback_url, http_url=self.authorization_url) - params = oauth_request.parameters + params = oauth_request data = urllib.urlencode(params) full_url='%s?%s'%(self.authorization_url, data) return full_url - def fetch_access_token(self, token): - oauth_request = oauth.OAuthRequest.from_consumer_and_token(self.consumer, token=token, http_url=self.access_token_url) + def fetch_access_token(self, token, oauth_verifier): + oauth_request = oauth2.Request.from_consumer_and_token(self.consumer, token=token, http_url=self.access_token_url) + oauth_request['oauth_verifier'] = oauth_verifier oauth_request.sign_request(self.signature_method, self.consumer, token) - params = oauth_request.parameters + params = oauth_request data = urllib.urlencode(params) full_url='%s?%s'%(self.access_token_url, data) response = urllib2.urlopen(full_url) - return oauth.OAuthToken.from_string(response.read()) + return oauth2.Token.from_string(response.read()) def fetch_data(self, token, http_url, parameters=None): - access_token = oauth.OAuthToken.from_string(token) - oauth_request = oauth.OAuthRequest.from_consumer_and_token( + access_token = oauth2.Token.from_string(token) + oauth_request = oauth2.Request.from_consumer_and_token( self.consumer, token=access_token, http_method="GET", http_url=http_url, parameters=parameters, ) @@ -81,7 +94,7 @@ class OAuthAbstractAuthConsumer(AuthenticationConsumer): url = oauth_request.to_url() connection = httplib.HTTPSConnection(self.server_url) - connection.request(oauth_request.http_method, url) + connection.request("GET", url) return connection.getresponse().read()