54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
"""Probe a single Cloudflare Pages custom domain + its zone DNS record."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import os
|
|
import urllib.error
|
|
import urllib.request
|
|
|
|
DOMAIN = "dota2.refining.dev"
|
|
PROJECT = "climperor-relations"
|
|
|
|
|
|
def cf(method: str, path: str, email: str, key: str) -> dict:
|
|
url = "https://api.cloudflare.com/client/v4" + path
|
|
req = urllib.request.Request(url, method=method, headers={
|
|
"X-Auth-Email": email, "X-Auth-Key": key, "Content-Type": "application/json",
|
|
})
|
|
try:
|
|
with urllib.request.urlopen(req) as r:
|
|
return json.loads(r.read().decode())
|
|
except urllib.error.HTTPError as e:
|
|
return json.loads(e.read().decode())
|
|
|
|
|
|
def main() -> None:
|
|
email = os.environ.get("CLOUDFLARE_EMAIL") or os.environ.get("KEYZOO_ASSET_META_USERNAME")
|
|
key = os.environ.get("CLOUDFLARE_API_KEY") or os.environ.get("KEYZOO_ASSET_SECRET_GLOBAL_API_KEY")
|
|
d = cf("GET", "/accounts", email, key)
|
|
aid = (d.get("result") or [{}])[0].get("id")
|
|
|
|
d = cf("GET", f"/accounts/{aid}/pages/projects/{PROJECT}/domains/{DOMAIN}", email, key)
|
|
print("domain detail:")
|
|
for k, v in (d.get("result") or {}).items():
|
|
if k != "zone_id":
|
|
print(f" {k}: {v}")
|
|
|
|
zd = cf("GET", "/zones?name=refining.dev", email, key)
|
|
zr = zd.get("result") or []
|
|
if not zr:
|
|
print("zone refining.dev: NOT FOUND on this account")
|
|
return
|
|
zid = zr[0]["id"]
|
|
recs = cf("GET", f"/zones/{zid}/dns_records?name={DOMAIN}", email, key)
|
|
print(f"dns records for {DOMAIN}:")
|
|
for rec in (recs.get("result") or []):
|
|
print(f" {rec.get('type')} {rec.get('name')} -> {rec.get('content')} (proxied={rec.get('proxied')})")
|
|
if not (recs.get("result") or []):
|
|
print(" (none -- CNAME not added yet)")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|