and implement needed methods"""
def __init__(self, request, redirect):
self.request = request
+ self.data = request.POST if request.method == 'POST' else request.GET
self.redirect = redirect
def auth_url(self):
form_tag_attrs=form_tag)
def auth_complete(self, *args, **kwargs):
- response = self.consumer().complete(dict(self.request.REQUEST.items()),
+ response = self.consumer().complete(dict(self.data.items()),
self.request.build_absolute_uri())
if not response:
raise ValueError('This is an OpenID relying party endpoint')
"""Return service provider URL.
This base class is generic accepting a POST parameter that specifies
provider URL."""
- if self.request.method != 'POST' or \
- OPENID_ID_FIELD not in self.request.POST:
+ if OPENID_ID_FIELD not in self.data:
raise ValueError('Missing openid identifier')
- return self.request.POST[OPENID_ID_FIELD]
+ return self.data[OPENID_ID_FIELD]
class BaseOAuth(BaseAuth):
raise ValueError('Missing unauthorized token')
token = OAuthToken.from_string(unauthed_token)
- if token.key != self.request.GET.get('oauth_token', 'no-token'):
+ if token.key != self.data.get('oauth_token', 'no-token'):
raise ValueError('Incorrect tokens')
access_token = self.access_token(token)
if extra_params:
params.update(extra_params)
- if 'oauth_verifier' in self.request.GET:
- params['oauth_verifier'] = self.request.GET['oauth_verifier']
+ if 'oauth_verifier' in self.data:
+ params['oauth_verifier'] = self.data['oauth_verifier']
request = OAuthRequest.from_consumer_and_token(self.consumer,
token=token,
http_url=url,
def auth_complete(self, *args, **kwargs):
"""Returns user, might be logged in"""
- if 'code' in self.request.GET:
+ if 'code' in self.data:
url = FACEBOOK_ACCESS_TOKEN_URL + '?' + \
urllib.urlencode({'client_id': settings.FACEBOOK_APP_ID,
'redirect_uri': self.redirect_uri,
'client_secret': settings.FACEBOOK_API_SECRET,
- 'code': self.request.GET['code']})
+ 'code': self.data['code']})
response = cgi.parse_qs(urllib.urlopen(url).read())
access_token = response['access_token'][0]
backend = get_backend(backend, request, redirect)
if not backend:
return HttpResponseServerError('Incorrect authentication service')
- request.session[REDIRECT_FIELD_NAME] = request.GET.get(REDIRECT_FIELD_NAME,
- default_final_url)
+ data = request.GET if request.method == 'GET' else request.POST
+ request.session[REDIRECT_FIELD_NAME] = data.get(REDIRECT_FIELD_NAME,
+ default_final_url)
if backend.uses_redirect:
return HttpResponseRedirect(backend.auth_url())
else: