]> git.parisson.com Git - django-social-auth.git/commitdiff
Added 'enabled' checking to backends
authorMatías Aguirre <matiasaguirre@gmail.com>
Wed, 19 Jan 2011 14:12:47 +0000 (12:12 -0200)
committerMatías Aguirre <matiasaguirre@gmail.com>
Wed, 19 Jan 2011 14:12:47 +0000 (12:12 -0200)
social_auth/backends/__init__.py
social_auth/backends/contrib/orkut.py
social_auth/backends/facebook.py
social_auth/backends/google.py
social_auth/backends/twitter.py

index aade8a963e7e47ebfa2f65640e4d379e5ddbf9d8..b513870c6ed35e7c216f9eba032aa7323b9e78dc 100644 (file)
@@ -273,6 +273,11 @@ class BaseAuth(object):
         otherwise return false."""
         return True
 
+    @classmethod
+    def enabled(cls):
+        """Return backend enabled status, all enabled by default"""
+        return True
+
 
 class OpenIdAuth(BaseAuth):
     """
@@ -393,6 +398,8 @@ class ConsumerBasedOAuth(BaseOAuth):
     ACCESS_TOKEN_URL = ''
     SERVER_URL = ''
     AUTH_BACKEND = None
+    SETTINGS_KEY_NAME = ''
+    SETTINGS_SECRET_NAME = ''
 
     def auth_url(self):
         """Returns redirect url"""
@@ -477,9 +484,17 @@ class ConsumerBasedOAuth(BaseOAuth):
 
     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
@@ -502,7 +517,10 @@ def get_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
index 9356063603040efe6e6ec0630600202e9904115a..1acae129b5ccb09db175c7d3ba638f55e589b7cd 100644 (file)
@@ -43,6 +43,8 @@ class OrkutBackend(OAuthBackend):
 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"""
@@ -63,10 +65,6 @@ class OrkutAuth(BaseGoogleOAuth):
         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 = {
index eff17d606bc0c7266e5229560bee541e80c19525..1731ab6efb9bf8114d780a91ceb74ee31afd3422 100644 (file)
@@ -79,6 +79,13 @@ class FacebookAuth(BaseOAuth):
         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 = {
index c2a12496b1a1b008944426e93956a15d10cdd5ba..ac4a1dff233b752d2b310018aa8535216cb3011c 100644 (file)
@@ -77,14 +77,12 @@ class BaseGoogleOAuth(ConsumerBasedOAuth):
         """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
@@ -122,8 +120,10 @@ class GoogleOAuth(BaseGoogleOAuth):
         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
index 04c47e37fe8d747300155cbc146305c7b86c002b..299d949abc77aaaecbbec040de4f0a45cc960b3b 100644 (file)
@@ -44,6 +44,8 @@ class TwitterAuth(ConsumerBasedOAuth):
     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"""
@@ -54,10 +56,6 @@ class TwitterAuth(ConsumerBasedOAuth):
         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 = {