From 4ad3d41a736b90cbaee7f749521f8ffe340a39af Mon Sep 17 00:00:00 2001 From: Tomas Kulhanek Date: Mon, 29 Jul 2019 06:38:12 +0100 Subject: [PATCH 1/6] ADD: b2access loginpass --- loginpass/b2access.py | 52 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 loginpass/b2access.py diff --git a/loginpass/b2access.py b/loginpass/b2access.py new file mode 100644 index 0000000..6a96d48 --- /dev/null +++ b/loginpass/b2access.py @@ -0,0 +1,52 @@ +""" + loginpass.b2access + ~~~~~~~~~~~~~~~~ + Loginpass Backend of B2ACCESS + + gets endpoint from B2ACCESS_API_URL environment variable, if not specified, default development url is used + + development: https://unity.eudat-aai.fz-juelich.de/ + production: https://b2access.eudat.eu/ + + :copyright: (c) 2019 by Tomas Kulhanek, ESDF + :license: MIT, see LICENSE for more details. + +""" + +from loginpass._core import UserInfo, OAuthBackend +import os + +#Authorization Grant https://unity.eudat-aai.fz-juelich.de:443/oauth2-as/oauth2-authz https://b2access.eudat.eu:443/oauth2-as/oauth2-authz +#Access Token https://unity.eudat-aai.fz-juelich.de:443/oauth2/token https://b2access.eudat.eu:443/oauth2/token +#Token Information/validation https://unity.eudat-aai.fz-juelich.de:443/oauth2 /tokeninfo https://b2access.eudat.eu:443/oauth2/tokeninfo +#User information https://unity.eudat-aai.fz-juelich.de:443/oauth2/userinfo https://b2access.eudat.eu:443/oauth2/userinfo + +# development endpoint +B2ACCESS_API_URL = os.environ.get('B2ACCESS_API_URL',default='https://unity.eudat-aai.fz-juelich.de/') +B2ACCESS_TOKEN_URL = B2ACCESS_API_URL + 'oauth2/token' +B2ACCESS_TOKENINFO_SUFFIX='oauth2/tokeninfo' +B2ACCESS_TOKENINFO_URL = B2ACCESS_API_URL + B2ACCESS_TOKENINFO_SUFFIX +B2ACCESS_AUTH_URL = B2ACCESS_API_URL + 'oauth2-as/oauth2-authz' +B2ACCESS_USERINFO_SUFFIX='oauth2/userinfo' +B2ACCESS_USERINFO_URL = B2ACCESS_API_URL + B2ACCESS_USERINFO_SUFFIX + +class B2Access(OAuthBackend): + OAUTH_TYPE = '2.0,oidc' + OAUTH_NAME = 'b2access' + OAUTH_CONFIG = { + 'api_base_url': B2ACCESS_API_URL, + 'access_token_url': B2ACCESS_TOKEN_URL, + 'authorize_url': B2ACCESS_AUTH_URL, + 'client_kwargs': {'scope': 'email profile'}, + } + + def profile(self, **kwargs): + print('b2access profile kwargs:',kwargs) + resp = self.get(B2ACCESS_USERINFO_SUFFIX,**kwargs) + data = resp.json() + params = { + 'sub': data['sub'], + 'name': data['name'], + 'email': data['email'], + } + return UserInfo(params) From f07decbaa675691395f252a6cc234dc8a10dc5d7 Mon Sep 17 00:00:00 2001 From: Tomas Kulhanek Date: Mon, 29 Jul 2019 07:27:54 +0100 Subject: [PATCH 2/6] UPDATE: passing base_url in function create_b2access_backend, default B2Access and B2AccessDev instances are provided --- loginpass/b2access.py | 59 +++++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/loginpass/b2access.py b/loginpass/b2access.py index 6a96d48..ecbdf8c 100644 --- a/loginpass/b2access.py +++ b/loginpass/b2access.py @@ -6,7 +6,7 @@ gets endpoint from B2ACCESS_API_URL environment variable, if not specified, default development url is used development: https://unity.eudat-aai.fz-juelich.de/ - production: https://b2access.eudat.eu/ + production: https://b2access.eudat.eu). :copyright: (c) 2019 by Tomas Kulhanek, ESDF :license: MIT, see LICENSE for more details. @@ -22,31 +22,34 @@ #User information https://unity.eudat-aai.fz-juelich.de:443/oauth2/userinfo https://b2access.eudat.eu:443/oauth2/userinfo # development endpoint -B2ACCESS_API_URL = os.environ.get('B2ACCESS_API_URL',default='https://unity.eudat-aai.fz-juelich.de/') -B2ACCESS_TOKEN_URL = B2ACCESS_API_URL + 'oauth2/token' -B2ACCESS_TOKENINFO_SUFFIX='oauth2/tokeninfo' -B2ACCESS_TOKENINFO_URL = B2ACCESS_API_URL + B2ACCESS_TOKENINFO_SUFFIX -B2ACCESS_AUTH_URL = B2ACCESS_API_URL + 'oauth2-as/oauth2-authz' -B2ACCESS_USERINFO_SUFFIX='oauth2/userinfo' -B2ACCESS_USERINFO_URL = B2ACCESS_API_URL + B2ACCESS_USERINFO_SUFFIX - -class B2Access(OAuthBackend): - OAUTH_TYPE = '2.0,oidc' - OAUTH_NAME = 'b2access' - OAUTH_CONFIG = { - 'api_base_url': B2ACCESS_API_URL, - 'access_token_url': B2ACCESS_TOKEN_URL, - 'authorize_url': B2ACCESS_AUTH_URL, - 'client_kwargs': {'scope': 'email profile'}, - } - - def profile(self, **kwargs): - print('b2access profile kwargs:',kwargs) - resp = self.get(B2ACCESS_USERINFO_SUFFIX,**kwargs) - data = resp.json() - params = { - 'sub': data['sub'], - 'name': data['name'], - 'email': data['email'], + +def create_b2access_backend(name,b2accessurl): + B2ACCESS_API_URL = b2accessurl.strip('/') + B2ACCESS_TOKEN_URL = '{b2accessurl}/oauth2/token'.format(b2accessurl=b2accessurl) + B2ACCESS_TOKENINFO_URL = '{b2accessurl}/oauth2/tokeninfo'.format(b2accessurl=b2accessurl) + B2ACCESS_AUTH_URL = '{b2accessurl}/oauth2-as/oauth2-authz'.format(b2accessurl=b2accessurl) + B2ACCESS_USERINFO_SUFFIX='/oauth2/userinfo' + B2ACCESS_USERINFO_URL = '{b2accessurl}/oauth2/userinfo'.format(b2accessurl=b2accessurl) + class B2Access(OAuthBackend): + OAUTH_TYPE = '2.0,oidc' + OAUTH_NAME = 'b2access' + OAUTH_CONFIG = { + 'api_base_url': B2ACCESS_API_URL, + 'access_token_url': B2ACCESS_TOKEN_URL, + 'authorize_url': B2ACCESS_AUTH_URL, + 'client_kwargs': {'scope': 'email profile'}, } - return UserInfo(params) + + def profile(self, **kwargs): + print('b2access profile kwargs:',kwargs) + resp = self.get(B2ACCESS_USERINFO_SUFFIX,**kwargs) + data = resp.json() + params = { + 'sub': data['sub'], + 'name': data['name'], + 'email': data['email'], + } + return UserInfo(params) + +B2Access = create_b2access_backend('b2access','https://b2access.eudat.eu') +B2AccessDev = create_b2access_backend('b2access','https://unity.eudat-aai.fz-juelich.de') From 38521adbc6b0b8a9d59aaaf6d0d5734041855bc5 Mon Sep 17 00:00:00 2001 From: Tomas Kulhanek Date: Mon, 29 Jul 2019 08:57:39 +0100 Subject: [PATCH 3/6] FIX: return class created --- loginpass/b2access.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/loginpass/b2access.py b/loginpass/b2access.py index ecbdf8c..c29fc51 100644 --- a/loginpass/b2access.py +++ b/loginpass/b2access.py @@ -30,7 +30,8 @@ def create_b2access_backend(name,b2accessurl): B2ACCESS_AUTH_URL = '{b2accessurl}/oauth2-as/oauth2-authz'.format(b2accessurl=b2accessurl) B2ACCESS_USERINFO_SUFFIX='/oauth2/userinfo' B2ACCESS_USERINFO_URL = '{b2accessurl}/oauth2/userinfo'.format(b2accessurl=b2accessurl) - class B2Access(OAuthBackend): + + class B2AccessAuth(OAuthBackend): OAUTH_TYPE = '2.0,oidc' OAUTH_NAME = 'b2access' OAUTH_CONFIG = { @@ -50,6 +51,7 @@ def profile(self, **kwargs): 'email': data['email'], } return UserInfo(params) + return B2AccessAuth B2Access = create_b2access_backend('b2access','https://b2access.eudat.eu') B2AccessDev = create_b2access_backend('b2access','https://unity.eudat-aai.fz-juelich.de') From e8d5378766c8b0da11ed046016825fa7a09ec534 Mon Sep 17 00:00:00 2001 From: Tomas Kulhanek Date: Wed, 31 Jul 2019 10:02:53 +0100 Subject: [PATCH 4/6] ADD: test cases for B2Access --- loginpass/__init__.py | 4 +++- tests/data/b2access_response.json | 5 +++++ tests/data/b2access_result.json | 5 +++++ tests/test_oauth_backends.py | 4 ++++ 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 tests/data/b2access_response.json create mode 100644 tests/data/b2access_result.json diff --git a/loginpass/__init__.py b/loginpass/__init__.py index 70c29fc..bf498b1 100644 --- a/loginpass/__init__.py +++ b/loginpass/__init__.py @@ -23,12 +23,13 @@ from .twitch import Twitch from .vk import VK from .orcid import ORCiD +from .b2access import B2Access, B2AccessDev, create_b2access_backend OAUTH_BACKENDS = [ BattleNet, Twitter, Facebook, Google, GitHub, Dropbox, Instagram, Reddit, Gitlab, Slack, Discord, StackOverflow, Bitbucket, Strava, Spotify, Yandex, - Twitch, VK, + Twitch, VK, B2Access ] __all__ = [ @@ -56,6 +57,7 @@ 'VK', 'ORCiD', 'OAUTH_BACKENDS', + 'B2Access','B2AccessDev','create_b2access_backend', ] __version__ = version diff --git a/tests/data/b2access_response.json b/tests/data/b2access_response.json new file mode 100644 index 0000000..f4ba101 --- /dev/null +++ b/tests/data/b2access_response.json @@ -0,0 +1,5 @@ +{ + "sub": "37198652-1231-e2e3435-1f231242350", + "name": "John Smith", + "email": "john.smith@example.com" +} diff --git a/tests/data/b2access_result.json b/tests/data/b2access_result.json new file mode 100644 index 0000000..f4ba101 --- /dev/null +++ b/tests/data/b2access_result.json @@ -0,0 +1,5 @@ +{ + "sub": "37198652-1231-e2e3435-1f231242350", + "name": "John Smith", + "email": "john.smith@example.com" +} diff --git a/tests/test_oauth_backends.py b/tests/test_oauth_backends.py index 9538186..a917b53 100644 --- a/tests/test_oauth_backends.py +++ b/tests/test_oauth_backends.py @@ -16,6 +16,7 @@ Gitlab, Strava, ORCiD, + B2Access ) @@ -91,3 +92,6 @@ def test_strava(self): def test_orcid(self): self.run_oauth_profile(ORCiD) + + def test_b2access(self): + self.run_oauth_profile(B2Access) From 06c15d72700368f8db6e2c0de0b5885e2f261e34 Mon Sep 17 00:00:00 2001 From: Tomas Kulhanek Date: Wed, 28 Aug 2019 11:02:26 +0200 Subject: [PATCH 5/6] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 242f912..5748fd6 100644 --- a/README.md +++ b/README.md @@ -75,6 +75,7 @@ Connections that Authlib Loginpass contains: - [x] Yandex - [x] Twitch - [x] VK +- [x] B2Access Usage ----- From 399912dad43b6abc63bbfbfcfd753e3bddc0dd8d Mon Sep 17 00:00:00 2001 From: Tomas Kulhanek Date: Wed, 28 Aug 2019 14:49:27 +0100 Subject: [PATCH 6/6] UPDATED b2access tests --- .../{b2access_response.json => b2access/01_response.json} | 4 ++-- tests/data/{b2access_result.json => b2access/result.json} | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename tests/data/{b2access_response.json => b2access/01_response.json} (75%) rename tests/data/{b2access_result.json => b2access/result.json} (75%) diff --git a/tests/data/b2access_response.json b/tests/data/b2access/01_response.json similarity index 75% rename from tests/data/b2access_response.json rename to tests/data/b2access/01_response.json index f4ba101..33f2ef6 100644 --- a/tests/data/b2access_response.json +++ b/tests/data/b2access/01_response.json @@ -1,5 +1,5 @@ { "sub": "37198652-1231-e2e3435-1f231242350", - "name": "John Smith", + "name": "John Smith", "email": "john.smith@example.com" -} +} \ No newline at end of file diff --git a/tests/data/b2access_result.json b/tests/data/b2access/result.json similarity index 75% rename from tests/data/b2access_result.json rename to tests/data/b2access/result.json index f4ba101..33f2ef6 100644 --- a/tests/data/b2access_result.json +++ b/tests/data/b2access/result.json @@ -1,5 +1,5 @@ { "sub": "37198652-1231-e2e3435-1f231242350", - "name": "John Smith", + "name": "John Smith", "email": "john.smith@example.com" -} +} \ No newline at end of file