diff options
| -rw-r--r-- | arthur/apis/cloudflare/zones.py | 20 | ||||
| -rw-r--r-- | arthur/exts/cloudflare/zones.py | 10 |
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) |