mirror of
https://github.com/jhd3197/ServerKit.git
synced 2026-11-03 02:26:43 +09:00
Add a Tunnels tab for creating and managing Cloudflare Tunnels (cloudflared) — exposing a local/private service through Cloudflare's edge with no public IP. Clearly distinct from ServerKit's WireGuard remote-access tunnels (always labelled "Cloudflare Tunnel" in the UI). Account-scoped; account resolved from the zone. - CloudflareTunnel model: records the connector token (encrypted at rest) and owning connection per (account, tunnel_id). - CloudflareClient: cfd_tunnel create (config_src=cloudflare) / list (is_deleted=false) / delete / token / connections / configurations get+put. - CloudflareService: create (returns + stores the one-time token, yields the cloudflared install command), list (managed-flagged), delete, fetch install, and public-hostname routing — sets the ingress config (always re-appends the required http_status:404 catch-all) and best-effort upserts the proxied CNAME hostname→<id>.cfargotunnel.com via the shared ownership-guarded DNS path. - /api/v1/cloudflare/zones/:id/tunnels* routes (read any user; writes admin). - TunnelsPanel (create form + one-time install box w/ copy, tunnel list with per-tunnel install reveal and public-hostname add/remove); api methods; SCSS. Tests: list is_deleted param, create config_src, name required, token stored encrypted + install string, managed-flagging, delete prunes local row, ingress built with catch-all last (7). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>