diff --git a/Plugin/unraid/pages/partnership.php b/Plugin/unraid/pages/partnership.php index 753b585..79d1c1f 100644 --- a/Plugin/unraid/pages/partnership.php +++ b/Plugin/unraid/pages/partnership.php @@ -342,48 +342,55 @@ function _render(data) { // ── Actions ─────────────────────────────────────────────────────────────────── -function vvPtPhase1(btn, hostId) { +function _vvPtRun(id, extraArgs) { + const params = {id, manual: '1'}; + if (extraArgs) params.extra_args = extraArgs; + return fetch('/plugins/varaverk/api/run.php', { + method: 'POST', + body: new URLSearchParams(params) + }).then(r => r.json()); +} + +window.vvPtPhase1 = function(btn, hostId) { if (!confirm(`Phase 1: SSH key exchange + conf push to ${hostId}?\n\nSafe to run before ${hostId} has Varaverk installed.`)) return; btn.disabled = true; btn.textContent = '⟳ Starting…'; - fetch('/plugins/varaverk/api/run.php', { - method: 'POST', - body: new URLSearchParams({id: 'Partnership/partnership_onboard.sh', manual: '1', extra_args: '--phase1-only'}) - }).then(r => r.json()).then(d => { - if (!d.ok) { alert('Failed: ' + (d.error ?? 'Unknown error')); } - setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Phase 1: SSH + Conf Push'; }, 3000); - }); -} + _vvPtRun('Partnership/partnership_onboard.sh', '--phase1-only') + .then(d => { if (!d.ok) alert('Failed: ' + (d.error ?? 'Unknown error')); }) + .catch(e => alert('Error: ' + e)) + .finally(() => setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Phase 1: SSH + Conf Push'; }, 3000)); +}; -function vvPtPhase2(btn, hostId) { - if (!confirm(`Phase 2: Deploy containers + arr stack + establish partnership on ${hostId}?\n\nThis requires ${hostId} to have Varaverk installed and SSH keys set up.`)) return; +window.vvPtPhase2 = function(btn, hostId) { + if (!confirm(`Phase 2: Deploy containers + arr stack + establish partnership on ${hostId}?\n\nRequires ${hostId} to have Varaverk installed and SSH keys set up.`)) return; btn.disabled = true; btn.textContent = '⟳ Starting…'; - fetch('/plugins/varaverk/api/run.php', { - method: 'POST', - body: new URLSearchParams({id: 'Partnership/partnership_onboard.sh', manual: '1', extra_args: '--phase2-only'}) - }).then(r => r.json()).then(d => { - if (!d.ok) { alert('Failed: ' + (d.error ?? 'Unknown error')); } - setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Run Phase 2 Manually'; }, 3000); - }); -} + _vvPtRun('Partnership/partnership_onboard.sh', '--phase2-only') + .then(d => { if (!d.ok) alert('Failed: ' + (d.error ?? 'Unknown error')); }) + .catch(e => alert('Error: ' + e)) + .finally(() => setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Run Phase 2 Manually'; }, 3000)); +}; -function vvPtOnboard(btn) { +window.vvPtOnboard = function(btn) { if (!confirm('Run full partnership_onboard.sh?\n\nRun on the MIRROR first, then on the OWNER.\n\nUse Phase 1 + Phase 2 buttons for step-by-step control.')) return; btn.disabled = true; btn.textContent = '⟳ Starting…'; - vvRunById('Partnership/partnership_onboard.sh'); - setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Onboard (Mirror)'; }, 4000); -} + _vvPtRun('Partnership/partnership_onboard.sh') + .then(d => { if (!d.ok) alert('Failed: ' + (d.error ?? 'Unknown error')); }) + .catch(e => alert('Error: ' + e)) + .finally(() => setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Onboard (Mirror)'; }, 4000)); +}; -function vvPtOffboard(btn) { +window.vvPtOffboard = function(btn) { if (btn.style.opacity === '0.35' || btn.style.cursor === 'default') return; if (!confirm('Run partnership_offboard.sh?\n\nThis will end the partnership, reconfigure WebUIs, and revoke SSH access.\n\nContinue?')) return; btn.disabled = true; btn.textContent = '⟳ Starting…'; - vvRunById('Partnership/partnership_offboard.sh'); - setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Offboard'; }, 4000); -} + _vvPtRun('Partnership/partnership_offboard.sh') + .then(d => { if (!d.ok) alert('Failed: ' + (d.error ?? 'Unknown error')); }) + .catch(e => alert('Error: ' + e)) + .finally(() => setTimeout(() => { btn.disabled = false; btn.textContent = '▶ Offboard'; }, 4000)); +}; // ── Poll ──────────────────────────────────────────────────────────────────────