41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
"""SatNOGS DB Auth0 login module auth backend"""
|
|
import requests
|
|
from social_core.backends.oauth import BaseOAuth2
|
|
|
|
|
|
class Auth0(BaseOAuth2):
|
|
"""Auth0 OAuth authentication backend"""
|
|
name = 'auth0'
|
|
SCOPE_SEPARATOR = ' '
|
|
ACCESS_TOKEN_METHOD = 'POST'
|
|
EXTRA_DATA = [('email', 'email')]
|
|
|
|
def authorization_url(self):
|
|
"""Return the authorization endpoint."""
|
|
return "https://" + self.setting('DOMAIN') + "/authorize"
|
|
|
|
def access_token_url(self):
|
|
"""Return the token endpoint."""
|
|
return "https://" + self.setting('DOMAIN') + "/oauth/token"
|
|
|
|
def auth_html(self):
|
|
"""Return the login endpoint."""
|
|
return "https://" + self.setting('DOMAIN') + "/login/auth0"
|
|
|
|
def get_user_id(self, details, response):
|
|
"""Return current user id."""
|
|
return details['user_id']
|
|
|
|
def get_user_details(self, response):
|
|
url = 'https://' + self.setting('DOMAIN') + '/userinfo'
|
|
headers = {'authorization': 'Bearer ' + response['access_token']}
|
|
resp = requests.get(url, headers=headers)
|
|
userinfo = resp.json()
|
|
|
|
return {
|
|
'username': userinfo['nickname'],
|
|
'email': userinfo['email'],
|
|
# 'first_name': userinfo['name'],
|
|
'user_id': userinfo['sub']
|
|
}
|