class BaseOAuth(BaseAuth):
"""OAuth base class"""
+ SETTINGS_KEY_NAME = ''
+ SETTINGS_SECRET_NAME = ''
+
def __init__(self, request, redirect):
"""Init method"""
super(BaseOAuth, self).__init__(request, redirect)
self.redirect_uri = self.build_absolute_uri(self.redirect)
+ def get_key_and_secret(self):
+ """Return tuple with Consumer Key and Consumer Secret for current
+ service provider. Must return (key, secret), order *must* be respected.
+ """
+ return setting(self.SETTINGS_KEY_NAME), \
+ setting(self.SETTINGS_SECRET_NAME)
+
+ @classmethod
+ def enabled(cls):
+ """Return backend enabled status by checking basic settings"""
+ return setting(cls.SETTINGS_KEY_NAME) and \
+ setting(cls.SETTINGS_SECRET_NAME)
+
class ConsumerBasedOAuth(BaseOAuth):
"""Consumer based mechanism OAuth authentication, fill the needed
REQUEST_TOKEN_URL = ''
ACCESS_TOKEN_URL = ''
SERVER_URL = ''
- SETTINGS_KEY_NAME = ''
- SETTINGS_SECRET_NAME = ''
def auth_url(self):
"""Return redirect url"""
"""Setups consumer"""
return OAuthConsumer(*self.get_key_and_secret())
- def get_key_and_secret(self):
- """Return tuple with Consumer Key and Consumer Secret for current
- service provider. Must return (key, secret), order *must* be respected.
- """
- return setting(self.SETTINGS_KEY_NAME), \
- setting(self.SETTINGS_SECRET_NAME)
-
- @classmethod
- def enabled(cls):
- """Return backend enabled status by checking basic settings"""
- return setting(cls.SETTINGS_KEY_NAME) and \
- setting(cls.SETTINGS_SECRET_NAME)
-
class BaseOAuth2(BaseOAuth):
"""Base class for OAuth2 providers.
'Accept': 'application/json'}
request = Request(self.ACCESS_TOKEN_URL, data=urlencode(params),
headers=headers)
-
+
try:
response = simplejson.loads(urlopen(request).read())
except HTTPError, e:
"""Return list with needed access scope"""
return []
- def get_key_and_secret(self):
- """Return tuple with Consumer Key and Consumer Secret for current
- service provider. Must return (key, secret), order *must* be respected.
- """
- return setting(self.SETTINGS_KEY_NAME), \
- setting(self.SETTINGS_SECRET_NAME)
-
# Backend loading was previously performed via the
# SOCIAL_AUTH_IMPORT_BACKENDS setting - as it's no longer used,
By default account id and token expiration time are stored in extra_data
field, check OAuthBackend class for details on how to extend it.
"""
-import cgi
from urllib import urlencode, urlopen
from django.utils import simplejson
-from django.contrib.auth import authenticate
from social_auth.utils import setting
from social_auth.backends import BaseOAuth2, OAuthBackend, USERNAME
"""Return list with needed access scope"""
# Look at http://developer.github.com/v3/oauth/
return setting('GITHUB_EXTENDED_PERMISSIONS', [])
-
+
def user_data(self, access_token, *args, **kwargs):
"""Loads user data from service"""
url = GITHUB_USER_DATA_URL + '?' + urlencode({