[grade=B] DC-107: Disaster recovery — one-click full backup + restore
CI / Test & Lint (push) Canceled after 0s
CI / Security audit (push) Canceled after 0s

3 endpoints:
- POST /api/v1/disaster/backup — complete snapshot (services, config, credentials,
  Caddyfile, DNS creds, themes, logo, favicon) as downloadable JSON with SHA-256 checksum
- POST /api/v1/disaster/restore — restore from uploaded snapshot with checksum verification
- GET  /api/v1/disaster/status — last backup/restore status

Checksum verification prevents restoring corrupted snapshots.
Partial restore mode continues on per-file errors.
1633 tests pass.
This commit is contained in:
Hermes
2026-08-12 12:52:16 -07:00
parent 0cda298651
commit 184ec2e49f
2 changed files with 250 additions and 0 deletions
+9
View File
@@ -65,6 +65,7 @@ const discoverRoutes = require('../routes/discover');
const discoverAdoptRoutes = require('../routes/discover-adopt');
const catalogRoutes = require('../routes/catalog');
const wizardRoutes = require('../routes/wizard');
const disasterRoutes = require('../routes/disaster-recovery');
const configRoutes = require('../routes/config');
const dnsRoutes = require('../routes/dns');
const notificationRoutes = require('../routes/notifications');
@@ -632,6 +633,14 @@ async function createApp() {
APP_TEMPLATES: require('./docker/app-templates'),
asyncHandler: ctx.asyncHandler,
}));
// DC-107: Disaster recovery — full backup + restore
apiRouter.use(disasterRoutes({
servicesStateManager: ctx.servicesStateManager,
platformPaths: require('../platform-paths'),
log: ctx.log,
asyncHandler: ctx.asyncHandler,
}));
apiRouter.use(updatesRoutes({
updateManager: ctx.updateManager,
selfUpdater: ctx.selfUpdater,