[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