import hashlib import base64 import requests import config def get_tokens_request(code, code_verifier) -> requests.Response: """ Performs initial requesting access and refresh tokens :param code: :param code_verifier: :return: """ token_request: requests.Response = requests.post( url=config.TOKEN_URL, headers={ 'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': config.PROPER_USER_AGENT }, data=f'redirect_uri={config.REDIRECT_URL}&' f'code={code}&' f'grant_type=authorization_code&' f'code_verifier={code_verifier}&' f'client_id={config.CLIENT_ID}') return token_request def get_nickname(access_token: str) -> str: return requests.get( url='https://companion.orerve.net/profile', headers={'Authorization': f'Bearer {access_token}', 'User-Agent': config.PROPER_USER_AGENT}).json()["commander"]["name"] def refresh_request(refresh_token: str) -> requests.Response: return requests.post( url=config.TOKEN_URL, headers={'Content-Type': 'application/x-www-form-urlencoded'}, data=f'grant_type=refresh_token&client_id={config.CLIENT_ID}&refresh_token={refresh_token}') def generate_challenge(_verifier: bytes) -> str: """ It takes code verifier and return code challenge :param _verifier: :return: """ return base64.urlsafe_b64encode(hashlib.sha256(_verifier).digest())[:-1].decode('utf-8')