Source code for zoom_api_helper.oauth

from time import time

import requests

from .constants import CACHE_DIR
from .utils import read_json_file_if_exists, save_json_file


[docs]def get_access_token(session: requests.Session, account_id: str, client_id: str, client_secret: str) -> str: """Retrieve an access token, given credentials for a Server-to-Server OAuth app. To use account credentials to get an access token for your app, call the Zoom OAuth token API with the account_credentials `grant_type` and your `account_id`. The successful response will be the access token, which is a Bearer token type that expires in an hour, with the scopes that you chose in your app settings screen. Ref: - https://marketplace.zoom.us/docs/guides/build/server-to-server-oauth-app/ :param session: (Optional) Requests Session :param account_id: Zoom Account ID :param client_id: OAuth app Client ID :param client_secret: OAuth app Client Secret :return: The access token for the app. """ filename = CACHE_DIR / f'token_{account_id}_{client_id}.json' # first, check the cache for the access token. cache = read_json_file_if_exists(filename) if cache and cache['expires_at'] > round(time()): return cache['access_token'] # else, we make a live API call to retrieve the token. params = { 'grant_type': 'account_credentials', 'account_id': account_id, } r = session.post( 'https://zoom.us/oauth/token', auth=(client_id, client_secret), params=params ) r.raise_for_status() data = r.json() token = data['access_token'] # 5 minutes before the token actually expires expires_at = round(time()) + data['expires_in'] - (5 * 60) # save the access token to the cache. cache = {'access_token': token, 'expires_at': expires_at} save_json_file(filename, cache) return token