Entrega read-only de apontamentos DNS (Cloudflare, OpenPanel BIND, público) no Desk e Console /admin/dominio, com spec, scripts de rollback e patches VM112 para painel lateral no passo DNS do onboarding (deploy wizard pendente). Co-authored-by: Cursor <cursoragent@cursor.com>
58 lines
2 KiB
Python
58 lines
2 KiB
Python
#!/usr/bin/env python3
|
|
from pathlib import Path
|
|
import re
|
|
|
|
APP = Path("/opt/ligbox-wizard/frontend/src/App.jsx")
|
|
text = APP.read_text(encoding="utf-8")
|
|
|
|
pattern = r" async function choosePortalDns\(\) \{.*?\n \}\n\n async function chooseByoDns"
|
|
replacement = r''' async function choosePortalDns() {
|
|
setDnsChoice('portal')
|
|
setError(null)
|
|
startBusy('dns_zone')
|
|
try {
|
|
const resolved = dnsResolve || (await api(`/onboarding/dns/resolve/${domain}`))
|
|
setDnsResolve(resolved)
|
|
const guide = await api('/onboarding/dns/cloudflare/provision-zone', {
|
|
method: 'POST',
|
|
body: JSON.stringify({ domain }),
|
|
})
|
|
setPortalGuide(guide)
|
|
const cf = guide.status || (await refreshCfStatus())
|
|
setCfStatus(cf)
|
|
markActionDone('choosePortalDns')
|
|
if (guide.verification) {
|
|
setVerification(guide.verification)
|
|
setResult({ type: 'dns', data: { verification: guide.verification } })
|
|
markActionDone('verifyZone')
|
|
markActionDone('applyPortalDns')
|
|
} else if (cf?.zone_in_account && cf?.can_apply_mail_records) {
|
|
markActionDone('verifyZone')
|
|
const data = await api('/onboarding/dns/cloudflare/apply', {
|
|
method: 'POST',
|
|
body: JSON.stringify({
|
|
domain,
|
|
zone_id: guide.zone_id || resolved.zone_id,
|
|
mail_aliases: sanitizeMailAliases(mailAliasInputs, domain),
|
|
}),
|
|
})
|
|
setVerification(data.verification)
|
|
setResult({ type: 'dns', data })
|
|
markActionDone('applyPortalDns')
|
|
}
|
|
} catch (e) {
|
|
setError(e.message)
|
|
setDnsChoice(null)
|
|
setActionsDone((prev) => ({ ...prev, choosePortalDns: false }))
|
|
} finally {
|
|
stopBusy()
|
|
}
|
|
}
|
|
|
|
async function chooseByoDns'''
|
|
|
|
new_text, n = re.subn(pattern, replacement, text, count=1, flags=re.DOTALL)
|
|
if n != 1:
|
|
raise SystemExit(f"replace failed: {n}")
|
|
APP.write_text(new_text, encoding="utf-8")
|
|
print("choosePortalDns fixed")
|