Files
2026-01-05 20:55:04 +08:00

84 lines
2.0 KiB
Python

import os
import re
import requests
def unquote(s: str) -> str:
return s.strip().strip('"')
url = "https://raw.githubusercontent.com/go-acme/lego/refs/heads/master/providers/dns/zz_gen_dns_providers.go"
import_prefix = "github.com/go-acme/lego/v4/providers/dns/"
response = requests.get(url)
data: list[str] = [unquote(i) for i in response.text.split("\n") if import_prefix in i]
data_map = {item.split("/")[-1]: item for item in data}
header = "//go:generate /usr/bin/python3 gen.py\n\npackage dnsproviders\n\n"
names: list[str] = [
'Local = "local"',
'Pseudo = "pseudo"',
]
imports: list[str] = ['"github.com/yusing/godoxy/internal/autocert"']
genMap: list[str] = [
"autocert.Providers[Local] = autocert.DNSProvider(NewDummyDefaultConfig, NewDummyDNSProviderConfig)",
"autocert.Providers[Pseudo] = autocert.DNSProvider(NewDummyDefaultConfig, NewDummyDNSProviderConfig)",
]
allowlist = [
"acmedns",
"azuredns",
"cloudflare",
"cloudns",
"clouddns",
"digitalocean",
"duckdns",
"edgedns",
"gcloud",
"godaddy",
"googledomains",
"hetzner",
"hostinger",
"httpreq",
"ionos",
"inwx",
"linode",
"namecheap",
"netcup",
"netlify",
"oraclecloud",
"ovh",
"porkbun",
"rfc2136",
# "route53",
"scaleway",
"spaceship",
"vercel",
"vultr",
"timewebcloud"
]
for name in allowlist:
import_str = data_map.get(name)
if import_str is None:
continue
imports.append(f'"{import_str}"')
genMap.append(
f'autocert.Providers["{name}"] = autocert.DNSProvider({name}.NewDefaultConfig, {name}.NewDNSProviderConfig)'
)
with open("providers.go", "w") as f:
f.write(header)
f.write("import (\n")
f.write("\n".join(imports))
f.write("\n)\n\n")
f.write("const (\n")
f.write("\n".join(names))
f.write("\n)\n\n")
f.write("func InitProviders() {\n")
f.write("\n".join(genMap))
f.write("\n}\n\n")
os.execvp("go", ["go", "fmt", "providers.go"])