43 lines
1.1 KiB
Python
43 lines
1.1 KiB
Python
import os
|
|
import requests
|
|
|
|
CF_API_TOKEN = os.getenv("CF_API_TOKEN")
|
|
ZONE = os.getenv("CF_ZONE")
|
|
SUBDOMAINS = os.getenv("CF_SUBDOMAINS").split(",")
|
|
|
|
HEADERS = {
|
|
"Authorization": f"Bearer {CF_API_TOKEN}",
|
|
"Content-Type": "application/json"
|
|
}
|
|
|
|
def get_public_ip():
|
|
return requests.get("https://api.ipify.org", timeout=5).text.strip()
|
|
|
|
def get_dns_status():
|
|
ip_pubblico = get_public_ip()
|
|
out = []
|
|
|
|
zone = requests.get(
|
|
"https://api.cloudflare.com/client/v4/zones",
|
|
headers=HEADERS,
|
|
params={"name": ZONE}
|
|
).json()["result"][0]
|
|
|
|
for sub in SUBDOMAINS:
|
|
fqdn = f"{sub}.{ZONE}"
|
|
dns = requests.get(
|
|
f"https://api.cloudflare.com/client/v4/zones/{zone['id']}/dns_records",
|
|
headers=HEADERS,
|
|
params={"name": fqdn}
|
|
).json()["result"][0]
|
|
|
|
out.append({
|
|
"name": fqdn,
|
|
"dns_ip": dns["content"],
|
|
"public_ip": ip_pubblico,
|
|
"proxied": dns["proxied"],
|
|
"status": "OK" if dns["content"] == ip_pubblico else "MISMATCH"
|
|
})
|
|
|
|
return out
|