diff --git a/data/get_user_details_extended.json b/data/get_user_details_extended.json index cbe4b84..598c3bb 100644 --- a/data/get_user_details_extended.json +++ b/data/get_user_details_extended.json @@ -1,6 +1,8 @@ { + "access_token": "bftc1ostvp3fucj9sxzkdgonnhcoi9uuqq2da93m", "date_joined": "2022-10-04 00:46:37", "email": "lpm0073@gmail.com", + "expires_in": 3600, "first_name": "Lawrence", "fullname": "Lawrence McDaniel", "id": 6, diff --git a/data/tests.py b/data/tests.py new file mode 100644 index 0000000..b423ce9 --- /dev/null +++ b/data/tests.py @@ -0,0 +1,48 @@ +import json + +# Opening JSON file +f = open('get_user_details_extended.json') + +# returns JSON object as +# a dictionary +response = json.load(f) + +def is_valid_user_details(response) -> bool: + """ + validate that the object passed is a dict containing at least the keys + in qc_keys. + """ + qc_keys = [ + "id", + "date_joined", + "email", + "first_name", + "fullname", + "is_staff", + "is_superuser", + "last_name", + "username", + ] + if all(key in response for key in qc_keys): + return True + return False + +def is_wp_oauth_refresh_token_response(response) -> bool: + """ + validate that the structure of the response contains the keys of + a refresh token dict. + """ + if not is_valid_user_details(response): + return False + qc_keys = ["access_token", "expires_in", "refresh_token", "scope", "token_type"] + if all(key in response for key in qc_keys): + return True + return False + +print('is_valid_user_details') +print(is_valid_user_details(response)) + +print('is_wp_oauth_refresh_token_response') +print(is_wp_oauth_refresh_token_response(response)) + + diff --git a/wp_oauth_backend/wp_oauth.py b/wp_oauth_backend/wp_oauth.py index b8d048e..d158618 100644 --- a/wp_oauth_backend/wp_oauth.py +++ b/wp_oauth_backend/wp_oauth.py @@ -111,8 +111,9 @@ class StepwiseMathWPOAuth2(BaseOAuth2): def is_valid_user_details(self, response) -> bool: """ - validate that the object passed is a dict containing at least the keys - in qc_keys. + validate that the object passed is a json dict containing at least + the keys in qc_keys. These are the dict keys created in get_user_details() + default return object. """ if not type(response) == dict: logger.warning( @@ -188,7 +189,7 @@ class StepwiseMathWPOAuth2(BaseOAuth2): """ if not self.is_valid_user_details(response): return False - qc_keys = ["access_token" "expires_in", "refresh_token", "scope", "token_type"] + qc_keys = ["access_token", "expires_in", "refresh_token", "scope", "token_type"] if all(key in response for key in qc_keys): return True return False @@ -205,7 +206,17 @@ class StepwiseMathWPOAuth2(BaseOAuth2): return True return False - def get_response_type(self, response): + def is_valid_get_user_details_response(self, response) -> bool: + """ + True if the response object can be processed by get_user_details() + """ + if self.is_valid_user_details(response): + return True + if self.is_wp_oauth_response(response): + return True + return False + + def get_response_type(self, response) -> str: if type(response) != dict: return "unknown response of type {t}".format(t=type(response)) if self.is_wp_oauth_error(response): @@ -270,11 +281,9 @@ class StepwiseMathWPOAuth2(BaseOAuth2): # see https://python-social-auth.readthedocs.io/en/latest/backends/implementation.html # Return user details from the Wordpress user account def get_user_details(self, response) -> dict: - if not ( - self.is_valid_user_details(response) or self.is_wp_oauth_response(response) - ): + if not self.is_valid_get_user_details_response(response): logger.error( - "get_user_details() - received an unrecognized response of {t}. Cannot continue: {response}".format( + "get_user_details() - received an invalid response object of {t}. Cannot continue: {response}".format( t=self.get_response_type(response), response=json.dumps(response, sort_keys=True, indent=4), ) @@ -284,7 +293,8 @@ class StepwiseMathWPOAuth2(BaseOAuth2): if VERBOSE_LOGGING: logger.info( - "get_user_details() begin with response: {response}".format( + "get_user_details() received {t}: {response}".format( + t=self.get_response_type(response), response=json.dumps(response, sort_keys=True, indent=4) ) ) @@ -303,7 +313,7 @@ class StepwiseMathWPOAuth2(BaseOAuth2): # ------------------------------------------------------------- if VERBOSE_LOGGING: logger.info( - "get_user_details() - detected an enhanced get_user_details() dict in the response: {response}".format( + "get_user_details() - detected an extended get_user_details() dict in the response: {response}".format( response=json.dumps(response, sort_keys=True, indent=4) ) ) @@ -388,20 +398,6 @@ class StepwiseMathWPOAuth2(BaseOAuth2): user_details = self.get_user_details(response) - if VERBOSE_LOGGING: - logger.info( - "user_data() local variable user_details: {user_details}".format( - user_details=json.dumps(user_details, sort_keys=True, indent=4) - ) - ) - if VERBOSE_LOGGING: - logger.info( - "user_data() class property value of self.user_details: {user_details}".format( - user_details=json.dumps( - self.user_details, sort_keys=True, indent=4 - ) - ) - ) except ValueError as e: logger.error("user_data() {err}".format(err=e)) return None