]> git.parisson.com Git - django-social-auth.git/commitdiff
Initial version of skyrock provider based on twitter, need test
authorniQo <niqo AT nospam>
Mon, 19 Mar 2012 12:03:17 +0000 (13:03 +0100)
committerniQo <niqo AT nospam>
Mon, 19 Mar 2012 12:03:17 +0000 (13:03 +0100)
social_auth/backends/contrib/skyrock.py [new file with mode: 0644]

diff --git a/social_auth/backends/contrib/skyrock.py b/social_auth/backends/contrib/skyrock.py
new file mode 100644 (file)
index 0000000..b65754c
--- /dev/null
@@ -0,0 +1,76 @@
+"""
+Skyrock OAuth support.
+
+This adds support for Skyrock OAuth service. An application must
+be registered first on skyrock and the settings SKYROCK_CONSUMER_KEY
+and SKYROCK_CONSUMER_SECRET must be defined with they corresponding
+values.
+
+User screen name is used to generate username.
+
+By default account id is stored in extra_data field, check OAuthBackend
+class for details on how to extend it.
+"""
+from django.utils import simplejson
+
+from social_auth.backends import ConsumerBasedOAuth, OAuthBackend, USERNAME
+
+
+# Skyrock configuration
+SKYROCK_SERVER = 'api.skyrock.com/v2'
+SKYROCK_REQUEST_TOKEN_URL = 'https://%s/oauth/initiate' % SKYROCK_SERVER
+SKYROCK_ACCESS_TOKEN_URL = 'https://%s/oauth/token' % SKYROCK_SERVER
+# Note: oauth/authorize forces the user to authorize every time.
+#       oauth/authenticate uses their previous selection, barring revocation.
+SKYROCK_AUTHORIZATION_URL = 'http://%s/oauth/authenticate' % SKYROCK_SERVER
+SKYROCK_CHECK_AUTH = 'https://%s/user/get.json' % SKYROCK_SERVER
+
+
+class SkyrockBackend(OAuthBackend):
+    """Skyrock OAuth authentication backend"""
+    name = 'skyrock'
+    EXTRA_DATA = [('id', 'id')]
+
+    def get_user_id(self, details, response):
+        return response['id_user']
+
+    def get_user_details(self, response):
+        """Return user details from Skyrock account"""
+        return {USERNAME: response['username'],
+                'email': response['email'],
+                'fullname': response['firstname'] + ' ' + response['name'],
+                'first_name': response['firstname'],
+                'last_name': response['name']}
+
+
+class SkyrockAuth(ConsumerBasedOAuth):
+    """Skyrock OAuth authentication mechanism"""
+    AUTHORIZATION_URL = SKYROCK_AUTHORIZATION_URL
+    REQUEST_TOKEN_URL = SKYROCK_REQUEST_TOKEN_URL
+    ACCESS_TOKEN_URL = SKYROCK_ACCESS_TOKEN_URL
+    SERVER_URL = SKYROCK_SERVER
+    AUTH_BACKEND = SkyrockBackend
+    SETTINGS_KEY_NAME = 'SKYROCK_CONSUMER_KEY'
+    SETTINGS_SECRET_NAME = 'SKYROCK_CONSUMER_SECRET'
+
+    def user_data(self, access_token):
+        """Return user data provided"""
+        request = self.oauth_request(access_token, SKYROCK_CHECK_AUTH)
+        json = self.fetch_response(request)
+        try:
+            return simplejson.loads(json)
+        except ValueError:
+            return None
+
+    def auth_complete(self, *args, **kwargs):
+        """Completes loging process, must return user instance"""
+        if 'denied' in self.data:
+            raise ValueError('Authentication denied')
+        else:
+            return super(SkyrockAuth, self).auth_complete(*args, **kwargs)
+
+
+# Backend definition
+BACKENDS = {
+    'skyrock': SkyrockAuth,
+}