aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arthur/apis/cloudflare/zones.py20
-rw-r--r--arthur/exts/cloudflare/zones.py10
2 files changed, 18 insertions, 12 deletions
diff --git a/arthur/apis/cloudflare/zones.py b/arthur/apis/cloudflare/zones.py
index 81a54f1..7d407a0 100644
--- a/arthur/apis/cloudflare/zones.py
+++ b/arthur/apis/cloudflare/zones.py
@@ -8,30 +8,34 @@ from arthur.config import CONFIG
AUTH_HEADER = {"Authorization": f"Bearer {CONFIG.cloudflare_token}"}
-async def list_zones(zone_name: Optional[str] = None) -> dict[str, str]:
+async def list_zones(
+ session: aiohttp.ClientSession,
+ zone_name: Optional[str] = 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 aiohttp.ClientSession() as session:
- async with session.get(endpoint, headers=AUTH_HEADER) as response:
- info = await response.json()
+ 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(zone_identifier: str) -> dict:
+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 aiohttp.ClientSession() as session:
- async with session.post(endpoint, headers=AUTH_HEADER, json=request_body) as response:
- info = await response.json()
+ async with session.post(endpoint, headers=AUTH_HEADER, json=request_body) as response:
+ info = await response.json()
return {"success": info["success"], "errors": info["errors"]}
diff --git a/arthur/exts/cloudflare/zones.py b/arthur/exts/cloudflare/zones.py
index 657de71..5840d36 100644
--- a/arthur/exts/cloudflare/zones.py
+++ b/arthur/exts/cloudflare/zones.py
@@ -1,4 +1,5 @@
"""The zones cog helps with managing Cloudflare zones."""
+import aiohttp
import discord
from discord.ext import commands
@@ -11,10 +12,11 @@ from arthur.utils import generate_error_message
class ZonesView(discord.ui.View):
"""This view allows users to select and purge the zones specified."""
- def __init__(self, domains: dict[str, str]) -> None:
+ def __init__(self, domains: dict[str, str], session: aiohttp.ClientSession) -> None:
super().__init__()
self.domains = domains
+ self.session = session
for domain, zone_id in self.domains.items():
self.children[0].add_option(label=domain, value=domain, description=zone_id, emoji="🌐")
@@ -37,7 +39,7 @@ class ZonesView(discord.ui.View):
zone_name = dropdown.values[0]
required_id = self.domains[zone_name]
- purge_attempt_response = await zones.purge_zone(required_id)
+ purge_attempt_response = await zones.purge_zone(self.session, required_id)
if purge_attempt_response["success"]:
message = ":white_check_mark:"
message += " **Cache cleared!** "
@@ -69,9 +71,9 @@ class Zones(commands.Cog):
@zones.command(name="purge")
async def purge(self, ctx: commands.Context) -> None:
"""Command to clear the Cloudflare cache of the specified zone."""
- cf_zones = await zones.list_zones()
+ cf_zones = await zones.list_zones(self.bot.http_session)
- view = ZonesView(cf_zones)
+ view = ZonesView(cf_zones, self.bot.http_session)
await ctx.send(":cloud: Pick which zone(s) that should have their cache purged", view=view)