feat(daemon): VPN daemon endpoints and compose artifact generation [P29.04] - #263
Conversation
ⓘ You've reached your Qodo monthly free-tier limit. Reviews pause until next month — upgrade your plan to continue now, or link your paid account if you already have one. |
|
Warning Rate limit exceeded
You’ve run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Repository YAML (base), Organization UI (inherited) Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (5)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…ds write, configDir, size limit, 3 new tests [subagent-review]
Summary
POST /api/vpn/profile— validates and atomically writes.ovpnfile, updates manifest, updates config, regenerates compose artifactPOST /api/vpn/credentials— writes gluetun-format credentials file (user\npass\n, mode 0o600), updates manifest, regenerates compose artifactGET /api/vpn/compose— serves pre-generatedcompose.synology.ymlfrom<configDir>/vpn/; 404 with{ error: string }JSON if no profile savedPOST /api/vpn/verify— checks gluetun/v1/openvpn/status+ Transmission RPC in parallel (10s timeout); returnspassthrough(no creds),vpn_bridge_active, orvpn_bridge_unreachablecompose.synology.ymlartifact (gluetun always present) withALLOWED_ORIGINSwired fromtrusted-origins.json; credentials never appear in the YAMLcheckWriteAuth(write token); new modulesrc/vpn-api.tsregistered insrc/api.tstest/vpn-api.test.ts; CI: 450 daemon pass, 160 web passTest plan
POST /api/vpn/profilewith valid.ovpn→ 200; files written; manifest set; compose generatedPOST /api/vpn/profileinvalid body (empty, JSON) → 400POST /api/vpn/profileno auth → 401POST /api/vpn/credentials→ 200; creds file =user\npass\n; manifest hasCredentials = truePOST /api/vpn/credentialsno auth → 401ALLOWED_ORIGINSpresent in generated composeGET /api/vpn/composeno profile → 404{ error: string }GET /api/vpn/composewith profile → 200application/yamlPOST /api/vpn/verifyno creds →{ status: 'passthrough' }POST /api/vpn/verifygluetun unreachable →{ status: 'vpn_bridge_unreachable' }POST /api/vpn/verifyboth reachable →{ status: 'vpn_bridge_active' }POST /api/vpn/verifytransmission unreachable →{ status: 'vpn_bridge_unreachable' }