grab more data from the http response object

This commit is contained in:
lpm0073 2022-10-03 22:45:32 -05:00
parent 6ab65a30a9
commit 6a9fcf65ef

View File

@ -2,7 +2,6 @@ import json
from urllib.parse import urlencode from urllib.parse import urlencode
from urllib.request import urlopen from urllib.request import urlopen
from social_core.backends.oauth import BaseOAuth2 from social_core.backends.oauth import BaseOAuth2
from django.conf import settings
from logging import getLogger from logging import getLogger
logger = getLogger(__name__) logger = getLogger(__name__)
@ -14,12 +13,11 @@ class WPOAuth2(BaseOAuth2):
name = 'wp-oauth' name = 'wp-oauth'
SOCIAL_AUTH_SANITIZE_REDIRECTS = False SOCIAL_AUTH_SANITIZE_REDIRECTS = False
ACCESS_TOKEN_METHOD = 'POST' ACCESS_TOKEN_METHOD = 'POST'
EXTRA_DATA = []
SCOPE_SEPARATOR = ',' SCOPE_SEPARATOR = ','
BASE_URL = "https://stepwisemath.ai" BASE_URL = "https://stepwisemath.ai"
@property @property
def base_url(self): def base_url(self) -> str:
return self.BASE_URL return self.BASE_URL
@property @property
@ -30,27 +28,57 @@ class WPOAuth2(BaseOAuth2):
def ACCESS_TOKEN_URL(self) -> str: def ACCESS_TOKEN_URL(self) -> str:
return f"{self.base_url}/oauth/token" return f"{self.base_url}/oauth/token"
@property
def EXTRA_DATA(self) -> list:
return [
('id', 'id'),
('username', 'username'),
('email', 'email'),
('first_name', 'first_name'),
('last_name', 'last_name'),
('fullname', 'fullname'),
('is_superuser', 'is_superuser'),
('is_staff', 'is_staff'),
('date_joined', 'date_joined'),
]
@property @property
def USER_QUERY(self) -> str: def USER_QUERY(self) -> str:
return f"{self.base_url}/oauth/me" return f"{self.base_url}/oauth/me"
def get_user_details(self, response): def get_user_details(self, response) -> dict:
"""Return user details from the WP account""" """Return user details from the WP account"""
# try to parse out the first and last names
split_name = response.get('display_name', '').split()
first_name = split_name[0] if len(split_name) > 0 else ''
last_name = split_name[-1] if len(split_name) == 2 else ''
# check for superuser / staff status
user_roles = response.get('user_roles', [])
super_user = 'administrator' in user_roles
user_details = { user_details = {
'id': int(response.get('ID')), 'id': int(response.get('ID')),
'username': response.get('user_login'), 'username': response.get('user_login'),
'email': response.get('user_email'), 'email': response.get('user_email'),
'first_name': response.get("first_name", ""), 'first_name': first_name,
'last_name': response.get("last_name", ""), 'last_name': last_name,
'fullname': response.get('display_name'), 'fullname': response.get('display_name'),
'is_superuser': super_user,
'is_staff': super_user,
'refresh_token': response.get('refresh_token'),
'scope': response.get('scope'),
'token_type': response.get('token_type'),
'date_joined': response.get('user_registered'),
'user_status': response.get('user_status'),
} }
logger.info('get_user_details() - response: {response} user_details: {user_details}'.format( logger.info('get_user_details() - user_details: {user_details}'.format(
response=json.dumps(response, sort_keys=True, indent=4),
user_details=json.dumps(user_details, sort_keys=True, indent=4) user_details=json.dumps(user_details, sort_keys=True, indent=4)
)) ))
return user_details return user_details
def user_data(self, access_token, *args, **kwargs): def user_data(self, access_token, *args, **kwargs) -> dict:
"""Loads user data from service""" """Loads user data from service"""
url = f'{self.USER_QUERY}?' + urlencode({ url = f'{self.USER_QUERY}?' + urlencode({
'access_token': access_token 'access_token': access_token