[Python-modules-commits] [python-social-auth] 87/89: Add a backend for Classlink.

Wolfgang Borgert debacle at moszumanska.debian.org
Sat Dec 24 15:15:59 UTC 2016


This is an automated email from the git hooks/post-receive script.

debacle pushed a commit to tag v0.2.15
in repository python-social-auth.

commit e95ce614613f50fbbce30817fc3cc032acd359f9
Author: Alex Dancho <alexanderdancho at gmail.com>
Date:   Thu Apr 7 11:14:33 2016 -0400

    Add a backend for Classlink.
---
 .gitignore                   |  3 +++
 social/backends/classlink.py | 44 ++++++++++++++++++++++++++++++++++++++++++++
 social/storage/base.py       |  3 ++-
 3 files changed, 49 insertions(+), 1 deletion(-)

diff --git a/.gitignore b/.gitignore
index f6bf775..7c2001d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -34,6 +34,9 @@ nosetests.xml
 .project
 .pydevproject
 
+# PyCharm
+.idea/
+
 test.db
 local_settings.py
 sessions/
diff --git a/social/backends/classlink.py b/social/backends/classlink.py
new file mode 100644
index 0000000..31f8f74
--- /dev/null
+++ b/social/backends/classlink.py
@@ -0,0 +1,44 @@
+from social.backends.oauth import BaseOAuth2
+
+
+class ClasslinkOAuth(BaseOAuth2):
+    """
+    Classlink OAuth authentication backend.
+
+    Docs: https://developer.classlink.com/docs/oauth2-workflow
+    """
+    name = 'classlink'
+    AUTHORIZATION_URL = 'https://launchpad.classlink.com/oauth2/v2/auth'
+    ACCESS_TOKEN_URL = 'https://launchpad.classlink.com/oauth2/v2/token'
+    ACCESS_TOKEN_METHOD = 'POST'
+    DEFAULT_SCOPE = ['profile']
+    REDIRECT_STATE = False
+    SCOPE_SEPARATOR = ' '
+
+    def get_user_id(self, details, response):
+        """Return user unique id provided by service"""
+        return response['UserId']
+
+    def get_user_details(self, response):
+        """Return user details from Classlink account"""
+        fullname, first_name, last_name = self.get_user_names(
+            first_name=response.get('FirstName'),
+            last_name=response.get('LastName')
+        )
+
+        return {
+            'username': response.get('Email') or response.get('LoginId'),
+            'email': response.get('Email'),
+            'fullname': fullname,
+            'first_name': first_name,
+            'last_name': last_name,
+        }
+
+    def user_data(self, token, *args, **kwargs):
+        """Loads user data from service"""
+        url = 'https://nodeapi.classlink.com/v2/my/info'
+        auth_header = {"Authorization": "Bearer %s" % token}
+        try:
+            return self.get_json(url, headers=auth_header)
+        except ValueError:
+            return None
diff --git a/social/storage/base.py b/social/storage/base.py
index f5f57af..5df42e3 100644
--- a/social/storage/base.py
+++ b/social/storage/base.py
@@ -81,7 +81,8 @@ class UserMixin(object):
 
     def set_extra_data(self, extra_data=None):
         if extra_data and self.extra_data != extra_data:
-            if self.extra_data and not isinstance(self.extra_data, str):
+            if self.extra_data and not isinstance(
+                    self.extra_data, six.string_types):
                 self.extra_data.update(extra_data)
             else:
                 self.extra_data = extra_data

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/python-social-auth.git



More information about the Python-modules-commits mailing list