62 lines
1.8 KiB
Python
62 lines
1.8 KiB
Python
# SPDX-FileCopyrightText: 2025 CyberRex
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
import requests
|
|
import os
|
|
import argparse
|
|
|
|
class CFSite:
|
|
def __init__(self, url, plan):
|
|
self.url = url
|
|
self.plan = plan
|
|
|
|
parser = argparse.ArgumentParser(description='Check Cloudflare Edge Locations and post to Misskey.')
|
|
parser.add_argument('--dry-run', action='store_true', help='Run without posting to Misskey')
|
|
args = parser.parse_args()
|
|
|
|
if os.path.exists('config.py'):
|
|
import config
|
|
else:
|
|
print("config.py not found")
|
|
exit(1)
|
|
|
|
test_sites = [
|
|
CFSite('misskey.io', 'Enterprise'),
|
|
CFSite('misskey.systems', 'Pro'),
|
|
CFSite('ohtrmi.cbrx.io', 'Free'),
|
|
]
|
|
|
|
result_txt = []
|
|
result_txt.append('Cloudflare Edge Location Check')
|
|
result_txt.append('')
|
|
|
|
# read from /cdn-cgi/trace
|
|
for site in test_sites:
|
|
try:
|
|
response = requests.get(f"https://{site.url}/cdn-cgi/trace", timeout=5)
|
|
response.raise_for_status()
|
|
trace_info = response.text
|
|
colo_line = next((line for line in trace_info.splitlines() if line.startswith('colo=')), None)
|
|
if colo_line:
|
|
colo = colo_line.split('=')[1]
|
|
if colo in config.expected_edge_locations:
|
|
result_txt.append(f'- {site.url} ({site.plan}) : {colo}✅️')
|
|
else:
|
|
result_txt.append(f'- {site.url} ({site.plan}) : {colo}⚠')
|
|
else:
|
|
print(f"Could not find 'colo' in the trace info for {site.url}")
|
|
except requests.RequestException as e:
|
|
print(f"Error accessing {site.url}: {e}")
|
|
|
|
txt = '\n'.join(result_txt)
|
|
|
|
# post to misskey
|
|
payload = {
|
|
'text': txt,
|
|
'visibility': 'home'
|
|
}
|
|
|
|
if not args.dry_run:
|
|
requests.post(f"{config.misskey_url}/api/notes/create", headers={'Authorization': 'Bearer ' + config.misskey_token}, json=payload)
|
|
else:
|
|
print(txt) |