diff --git a/dashcaddy-api/src/app.js b/dashcaddy-api/src/app.js index 3372ac0..a2bd434 100644 --- a/dashcaddy-api/src/app.js +++ b/dashcaddy-api/src/app.js @@ -89,6 +89,7 @@ const networkLifecycleRoutes = require('../routes/network-lifecycle'); const networkGroupsRoutes = require('../routes/network-groups'); const networkResourcesRoutes = require('../routes/network-resources'); const networkWizardRoutes = require('../routes/network-wizard'); +const networkWgRedeemRoutes = require('../routes/network-wg-redeem'); const sitesRoutes = require('../routes/sites'); const credentialsRoutes = require('../routes/credentials'); const arrRoutes = require('../routes/arr'); @@ -782,6 +783,31 @@ async function createApp() { asyncHandler: ctx.asyncHandler, log: ctx.log, })); + + // Public WG invite redemption (DC-150). Lazy provider resolution: the + // factory requires a provider at construction; get one only when the + // WireGuard provider is registered, else mount a 503 stub. + const p7WgProviderFactory = () => { + const prov = getActiveProvider(); + return prov && prov.id && prov.id() === 'wireguard' ? prov : null; + }; + let p7WgRedeemRouter = null; + const p7WgRedeemLazy = (req, res, next) => { + if (!p7WgRedeemRouter) { + const prov = p7WgProviderFactory(); + if (!prov) { + return res.status(503).json({ error: 'network provider not active' }); + } + p7WgRedeemRouter = networkWgRedeemRoutes({ + provider: prov, + endpoint: ctx.networkWgEndpoint, + asyncHandler: ctx.asyncHandler, + log: ctx.log, + }); + } + return p7WgRedeemRouter(req, res, next); + }; + apiRouter.use('/network/wg', p7WgRedeemLazy); // ── end P7 mounts ─────────────────────────────────────────────────────── apiRouter.use(sitesRoutes({ asyncHandler: ctx.asyncHandler,