otherwise return false."""
return True
+ @classmethod
+ def enabled(cls):
+ """Return backend enabled status, all enabled by default"""
+ return True
+
class OpenIdAuth(BaseAuth):
"""
ACCESS_TOKEN_URL = ''
SERVER_URL = ''
AUTH_BACKEND = None
+ SETTINGS_KEY_NAME = ''
+ SETTINGS_SECRET_NAME = ''
def auth_url(self):
"""Returns redirect url"""
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.
+ service provider. Must return (key, secret), order *must* be respected.
"""
- raise NotImplementedError('Implement in subclass')
+ return getattr(settings, self.SETTINGS_KEY_NAME), \
+ getattr(settings, self.SETTINGS_SECRET_NAME)
+
+ @classmethod
+ def enabled(cls):
+ """Return backend enabled status by checking basic settings"""
+ return all(hasattr(settings, name) for name in
+ (cls.SETTINGS_KEY_NAME,
+ cls.SETTINGS_SECRET_NAME))
# import sources from where check for auth backends
try:
name = basename(name).replace('.py', '')
sub = import_module(mod_name + '.' + name)
- backends.update(sub.BACKENDS)
+ # register only enabled backends
+ backends.update(((key, val)
+ for key, val in sub.BACKENDS.items()
+ if val.enabled()))
except (ImportError, AttributeError):
pass
return backends
class OrkutAuth(BaseGoogleOAuth):
"""Orkut OAuth authentication mechanism"""
AUTH_BACKEND = OrkutBackend
+ SETTINGS_KEY_NAME = 'ORKUT_CONSUMER_KEY'
+ SETTINGS_SECRET_NAME = 'ORKUT_CONSUMER_SECRET'
def user_data(self, access_token):
"""Loads user data from Orkut service"""
except (simplejson.JSONDecodeError, KeyError):
return None
- def get_key_and_secret(self):
- """Return Orkut Consumer Key and Consumer Secret pair"""
- return settings.ORKUT_CONSUMER_KEY, settings.ORKUT_CONSUMER_SECRET
-
# Backend definition
BACKENDS = {
except simplejson.JSONDecodeError:
return None
+ @classmethod
+ def enabled(cls):
+ """Return backend enabled status by checking basic settings"""
+ return all(hasattr(settings, name) for name in
+ ('FACEBOOK_APP_ID',
+ 'FACEBOOK_API_SECRET'))
+
# Backend definition
BACKENDS = {
"""Loads user data from G service"""
raise NotImplementedError('Implement in subclass')
- def get_key_and_secret(self):
- """Return Consumer Key and Consumer Secret pair"""
- raise NotImplementedError('Implement in subclass')
-
class GoogleOAuth(BaseGoogleOAuth):
"""Google OAuth authorization mechanism"""
AUTH_BACKEND = GoogleOAuthBackend
+ SETTINGS_KEY_NAME = 'GOOGLE_CONSUMER_KEY'
+ SETTINGS_SECRET_NAME = 'GOOGLE_CONSUMER_SECRET'
def user_data(self, access_token):
"""Loads user data data from googleapis service, only email so far
registered and a security badge is displayed on authorization page.
http://code.google.com/apis/accounts/docs/OAuth_ref.html#SigningOAuth
"""
- return getattr(settings, 'GOOGLE_CONSUMER_KEY', 'anonymous'), \
- getattr(settings, 'GOOGLE_CONSUMER_SECRET', 'anonymous')
+ try:
+ return super(GoogleOAuth, self).get_key_and_secret()
+ except AttributeError:
+ return 'anonymous', 'anonymous'
# Backend definition
ACCESS_TOKEN_URL = TWITTER_ACCESS_TOKEN_URL
SERVER_URL = TWITTER_SERVER
AUTH_BACKEND = TwitterBackend
+ SETTINGS_KEY_NAME = 'TWITTER_CONSUMER_KEY'
+ SETTINGS_SECRET_NAME = 'TWITTER_CONSUMER_SECRET'
def user_data(self, access_token):
"""Return user data provided"""
except simplejson.JSONDecodeError:
return None
- def get_key_and_secret(self):
- """Return Twitter Consumer Key and Consumer Secret pair"""
- return settings.TWITTER_CONSUMER_KEY, settings.TWITTER_CONSUMER_SECRET
-
# Backend definition
BACKENDS = {