diff --git a/token.py b/token.py new file mode 100644 index 0000000..f28db15 --- /dev/null +++ b/token.py @@ -0,0 +1,175 @@ +""" +Token Class object +""" + +import logging +import requests + + +class Token(): + """Token class""" + + def __init__(self, base_url, jwt): + """ + __init__ Init Token + + :param base_url: Base URL for Token API + :param jwt: JWT Authentication for Token API + """ + + self.base_url = base_url + self.jwt = jwt + + + def get(self, campaign_key): + """ + get Get the campaign + + :param campaign_key: The Campaign key to get with API + """ + + # Set the headers for the request + headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + 'Authorization': f'Bearer {self.jwt}' + } + + # Run the GET + response = requests.get( + f'{self.base_url}/api/v1/campaigns/{campaign_key}', + headers=headers, + timeout=300 + ) + + # Good response. Return Campaign + if response.ok: + return response.json() + + # Log error and retunr null + logging.error("[AFCAMPAIGN GET] [%s]", response.text) + return None + + + def patch(self, campaign_key, patch_data): + """ + patch Path the Campaign + + :param campaign_key: The Campaign key to update with API + :param patch_data: The data to update the Campaign + """ + + # Set the headers for the request + headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + 'Authorization': f'Bearer {self.jwt}' + } + + # Set the key to the patch data + patch_data['key'] = campaign_key + + # Run the GET + response = requests.patch( + f'{self.base_url}/api/v1/campaigns/{campaign_key}', + headers=headers, + timeout=300, + json=patch_data + ) + + # Good response. Return Campaign + if response.ok: + return response.json() + + # Log error and retunr null + logging.error("[AFCAMPAIGN UPDATE] [%s]", response.text) + return None + + + def password_reset_trigger(self, username=None, email=None): + """ + password_reset_trigger Send a password reset email to the username account provided + + :param username: The username of the account to be affected + :param email: The email of the account to be affected + """ + + # Set the headers for the request + headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + #'Authorization': f'Bearer {self.jwt}' + } + + print(f"token::password_reset_trigger(): username = {username} email = {email}") + + # Set the patch data + patch_data = {} + if username not in (None, ""): + patch_data['user_name'] = username + patch_data['email'] = None + elif email not in (None, ""): + patch_data['user_name'] = None + patch_data['email'] = email + + if patch_data['user_name'] in (None, '') and patch_data['email'] in (None, ''): + print(f"token::password_reset_trigger(): Error: 'user_name' and 'email' values are both empty. patch_data = {patch_data}") + return None + + print(f'{self.base_url}/api/v1/token/generate') + print(f'patch_data = {patch_data}') + + # Run the PATCH + response = requests.patch( + f'{self.base_url}/api/v1/token/generate', + headers=headers, + timeout=300, + json=patch_data + ) + + if response.ok: + return response.json() + + logging.error("[PASSWORD RESET TRIGGER] [%s]", response.text) + + return None + + + def password_reset(self, token_value=None, password=None, verify=None): + """ + password_reset Reset password with token value + + :param username: The username of the account to be affected + """ + + if token_value in (None, ""): + return None + + # Set the headers for the request + headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + #'Authorization': f'Bearer {self.jwt}' + } + + # Set the key to the patch data + patch_data = { + 'user_token': token_value, + 'password': password, + 'password_verification': verify + } + + # Run the PATCH + response = requests.patch( + f'{self.base_url}/api/v1/token/password/{token_value}', + headers=headers, + timeout=300, + json=patch_data + ) + + if response.ok: + return response.json() + + logging.error("[PASSWORD RESET] [%s]", response.text) + + return None