FastCF

acctok = os.environ['CLOUDFLARE_ACC_TOK']
usrtok = os.environ['CLOUDFLARE_USR_TOK']
acctid = os.environ['CLOUDFLARE_ACCT_ID']
acceml = os.environ['CLOUDFLARE_EML_ADD']
base = 'https://api.cloudflare.com/client/v4'
uhdrs = {'Authorization': f'Bearer {usrtok}'}
r = httpx.get(f'{base}/user/tokens/verify', headers=uhdrs)
r.json()['success']
True
ahdrs = {'Authorization': f'Bearer {acctok}'}
r = httpx.get(f'{base}/accounts/{acctid}/tokens/verify', headers=ahdrs)
r.json()['success']
True
glbtok = os.environ['CLOUDFLARE_API_KEY']

ghdrs = {'X-Auth-Email': acceml, 'X-Auth-Key': glbtok, 'Content-Type': 'application/json'}
r = httpx.get(f'{base}/user', headers=ghdrs)
r.json()['success']
True
r = httpx.get(f'{base}/zones', headers=uhdrs)
[(z['name'], z['id'][:8]) for z in r.json()['result'][:1]]
[('aaa.as', '6afde8dc')]
r = httpx.get(f'{base}/zones', headers=ahdrs, params={'account.id': acctid})
[(z['name'], z['id'][:8]) for z in r.json()['result'][:1]]
[('aaa.as', '6afde8dc')]

Build endpoint dict


source

build_cf_eps


def build_cf_eps(
    
):
eps_test = L(build_cf_eps())
len(eps_test), eps_test[0]
(2575,
 {'path': '/accounts',
  'verb': 'get',
  'data': [],
  'op_id': 'accounts-list-accounts',
  'qparams': [{'name': 'name', 'description': ''},
   {'name': 'page', 'description': ''},
   {'name': 'per_page', 'description': ''},
   {'name': 'direction', 'description': ''}],
  'summary': 'List Accounts',
  'tags': ['Accounts']})

Create API client


source

CloudflareApi


def CloudflareApi(
    token:NoneType=None, account_id:NoneType=None, email:NoneType=None, api_key:NoneType=None,
    base_url:str='https://api.cloudflare.com/client/v4'
):

Cloudflare API client supporting both user and account tokens

ucf = CloudflareApi(token=usrtok)
ucf.verify().result.status
'active'
acf = CloudflareApi(token=acctok, account_id=acctid)
acf.verify().result.status
'active'
ucf('/zones').result[0].name, acf('/zones').result[0].name
('aaa.as', 'aaa.as')
zid = ucf('/zones').result[0].id
ucf.dns_records_zone.list_dns_records(zone_id=zid).result[0].name
'*.aaa.as'
acf.dns_records_zone.list_dns_records(zone_id=zid).result[0].name
'*.aaa.as'
ucf.zone
  • zone.get(name=None, status=None, account_id=None, account_name=None, page=None, per_page=None, order=None, direction=None, match=None): List Zones
  • zone.post(account: dict = None, name: str = None, type: str = ‘full’): Create Zone
  • zone.delete(zone_id): Delete Zone
  • zone.get_zone_id(zone_id): Zone Details
  • zone.patch(zone_id, paused: bool = False, plan: dict = None, type: str = None, vanity_name_servers: list = []): Edit Zone
  • zone.put_zones_zone_id_activation_check(zone_id): Rerun the Activation Check
  • zone.purge(zone_id): Purge Cached Content
ucf.zone.get().result[0].name
'aaa.as'
ucf.dns_records_zone.list_dns_records(zone_id=zid).result[0].name
'*.aaa.as'

source

CloudflareApi.create_token


def create_token(
    doms, perm_names, name, grp:str='account.zone.'
):

Create a scoped Cloudflare API token for given domains and permission names