blob: 4e017f8822875fe7afc18f1fe0bda1aca85f6090 (
plain) (
blame)
| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 | """APIs for managing Cloudflare zones."""
import aiohttp
from arthur.config import CONFIG
AUTH_HEADER = {"Authorization": f"Bearer {CONFIG.cloudflare_token.get_secret_value()}"}
async def list_zones(
    session: aiohttp.ClientSession,
    zone_name: str | None = None,
) -> dict[str, str]:
    """List all Cloudflare zones."""
    endpoint = "https://api.cloudflare.com/client/v4/zones"
    if zone_name is not None:
        endpoint += f"?name={zone_name}"
    async with session.get(endpoint, headers=AUTH_HEADER) as response:
        info = await response.json()
    zones = info["result"]
    return {zone["name"]: zone["id"] for zone in zones}
async def purge_zone(
    session: aiohttp.ClientSession,
    zone_identifier: str,
) -> dict:
    """Purge the cache for a Cloudflare zone."""
    endpoint = f"https://api.cloudflare.com/client/v4/zones/{zone_identifier}/purge_cache"
    request_body = {"purge_everything": True}
    async with session.post(endpoint, headers=AUTH_HEADER, json=request_body) as response:
        info = await response.json()
    return {"success": info["success"], "errors": info["errors"]}
 |