[Python-modules-commits] [python-social-auth] 66/131: Line support added
Wolfgang Borgert
debacle at moszumanska.debian.org
Sat Dec 24 15:17:03 UTC 2016
This is an automated email from the git hooks/post-receive script.
debacle pushed a commit to tag v0.2.20
in repository python-social-auth.
commit 61cd24ef8aa394df96554c187d49cc251cb9f8aa
Author: Goncharov Ilia <dev0handler at gmail.com>
Date: Sun Jun 19 20:10:53 2016 +0300
Line support added
---
README.rst | 2 ++
docs/backends/line.rst | 7 ++++
social/backends/line.py | 87 +++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 96 insertions(+)
diff --git a/README.rst b/README.rst
index bcc9a6b..1b15002 100644
--- a/README.rst
+++ b/README.rst
@@ -84,6 +84,7 @@ or current ones extended):
* Kakao_ OAuth2 https://developer.kakao.com
* `Khan Academy`_ OAuth1
* Launchpad_ OpenId
+ * Line_ OAuth2
* Linkedin_ OAuth1
* Live_ OAuth2
* Livejournal_ OpenId
@@ -265,6 +266,7 @@ check `django-social-auth LICENSE`_ for details:
.. _Instagram: https://instagram.com
.. _Itembase: https://www.itembase.com
.. _LaunchPad: https://help.launchpad.net/YourAccount/OpenID
+.. _Line: https://line.me/
.. _Linkedin: https://www.linkedin.com
.. _Live: https://live.com
.. _Livejournal: http://livejournal.com
diff --git a/docs/backends/line.rst b/docs/backends/line.rst
new file mode 100644
index 0000000..93fc479
--- /dev/null
+++ b/docs/backends/line.rst
@@ -0,0 +1,7 @@
+Line.me
+==========
+
+Fill App Id and Secret in your project settings::
+
+ SOCIAL_AUTH_LINE_KEY = '...'
+ SOCIAL_AUTH_LINE_SECRET = '...'
diff --git a/social/backends/line.py b/social/backends/line.py
new file mode 100644
index 0000000..347d52e
--- /dev/null
+++ b/social/backends/line.py
@@ -0,0 +1,87 @@
+# vim:fileencoding=utf-8
+import requests
+import json
+
+from social.backends.oauth import BaseOAuth2
+from social.exceptions import AuthFailed
+from social.utils import handle_http_errors
+
+
+class LineOAuth2(BaseOAuth2):
+ name = 'line'
+ AUTHORIZATION_URL = 'https://access.line.me/dialog/oauth/weblogin'
+ ACCESS_TOKEN_URL = 'https://api.line.me/v1/oauth/accessToken'
+ BASE_API_URL = 'https://api.line.me'
+ USER_INFO_URL = BASE_API_URL + '/v1/profile'
+ ACCESS_TOKEN_METHOD = 'POST'
+ STATE_PARAMETER = True
+ REDIRECT_STATE = True
+ ID_KEY = 'mid'
+ EXTRA_DATA = [
+ ('mid', 'id'),
+ ('expire', 'expire'),
+ ('refreshToken', 'refresh_token')
+ ]
+
+ def auth_params(self, state=None):
+ client_id, client_secret = self.get_key_and_secret()
+ params = {
+ 'client_id': client_id,
+ 'redirect_uri': self.get_redirect_uri(),
+ 'response_type': self.RESPONSE_TYPE
+ }
+ return params
+
+ def process_error(self, data):
+ error_code = data.get('errorCode') or data.get('statusCode') or data.get('error')
+ error_message = data.get('errorMessage') or data.get('statusMessage') or data.get('error_desciption')
+ if error_code is not None or error_message is not None:
+ raise AuthFailed(self, error_message or error_code)
+
+ @handle_http_errors
+ def auth_complete(self, *args, **kwargs):
+ """Completes login process, must return user instance"""
+ client_id, client_secret = self.get_key_and_secret()
+ code = self.data.get('code')
+
+ self.process_error(self.data)
+
+ try:
+ response = self.request_access_token(
+ self.access_token_url(),
+ method=self.ACCESS_TOKEN_METHOD,
+ params={
+ 'requestToken': code,
+ 'channelSecret': client_secret
+ }
+ )
+ self.process_error(response)
+
+ return self.do_auth(response['accessToken'], response=response, *args, **kwargs)
+ except requests.HTTPError as err:
+ self.process_error(json.loads(err.response.content))
+
+ def get_user_details(self, response):
+ response.update({
+ 'fullname': response.get('displayName'),
+ 'picture_url': response.get('pictureUrl')
+ })
+ return response
+
+ def get_user_id(self, details, response):
+ """Return a unique ID for the current user, by default from server response."""
+ return response.get(self.ID_KEY)
+
+ def user_data(self, access_token, *args, **kwargs):
+ """Loads user data from service"""
+ try:
+ response = self.get_json(
+ self.USER_INFO_URL,
+ headers={
+ "Authorization": "Bearer {}".format(access_token)
+ }
+ )
+ self.process_error(response)
+ return response
+ except requests.HTTPError as err:
+ self.process_error(err.response.json())
--
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