[grade=B] DC-103: One-click adopt — auto-generate Caddy route + DNS + service
CI / Test & Lint (push) Canceled after 0s
CI / Security audit (push) Canceled after 0s

POST /api/v1/discover/adopt — takes a discovered container and creates:
1. DashCaddy service entry (with subdomain, domain, URL)
2. Caddyfile reverse_proxy route via admin API
3. DNS A record (via configured DNS provider)

Validates containerId, serviceId (subdomain-safe), port, name.
Prevents duplicate service IDs. 1633 tests pass.
This commit is contained in:
Hermes
2026-08-12 12:40:21 -07:00
parent 29831ad0b2
commit f68a5afe73
2 changed files with 170 additions and 0 deletions
+11
View File
@@ -62,6 +62,7 @@ const authRoutes = require('../routes/auth');
const shareRoutes = require('../routes/share');
const i18nRoutes = require('../routes/i18n');
const discoverRoutes = require('../routes/discover');
const discoverAdoptRoutes = require('../routes/discover-adopt');
const configRoutes = require('../routes/config');
const dnsRoutes = require('../routes/dns');
const notificationRoutes = require('../routes/notifications');
@@ -607,6 +608,16 @@ async function createApp() {
servicesStateManager: ctx.servicesStateManager,
asyncHandler: ctx.asyncHandler,
}));
// DC-103: One-click adopt — auto-generate routes + DNS + service entry
apiRouter.use(discoverAdoptRoutes({
docker: ctx.docker,
servicesStateManager: ctx.servicesStateManager,
caddy: ctx.caddy,
dns: ctx.dns,
siteConfig: ctx.config,
asyncHandler: ctx.asyncHandler,
}));
apiRouter.use(updatesRoutes({
updateManager: ctx.updateManager,
selfUpdater: ctx.selfUpdater,