cmd: chore codes

Kim committed Oct 28, 2025 at 13:33 UTC 33b6147c4b3b5df0711dfd592762294f13d81210
3 files changed +20 -33
cmd/demo-app/main.go
+7 -7
@@ -16,9 +16,9 @@ import (
16
17 var (
18 flagBootstraps []string
19 - flagName string
19 flagALPNs []string
21 - flagAdminPort int
20 + flagName string
21 + flagPort int
22 )
23
24 var rootCmd = &cobra.Command{
@@ -29,10 +29,10 @@ var rootCmd = &cobra.Command{
29
30 func init() {
31 flags := rootCmd.PersistentFlags()
32 - flags.StringArrayVar(&flagBootstraps, "bootstrap", []string{"ws://127.0.0.1:4017/relay"}, "bootstrap websocket url (repeatable), e.g. ws://127.0.0.1:4017/relay")
32 + flags.StringArrayVar(&flagBootstraps, "bootstrap", []string{"ws://127.0.0.1:4017/relay"}, "bootstrap websocket urls")
33 + flags.StringArrayVar(&flagALPNs, "alpn", []string{"h1"}, "ALPN identifiers for this service")
34 flags.StringVar(&flagName, "name", "demo-app", "lease name to display on server UI")
34 - flags.StringArrayVar(&flagALPNs, "alpn", []string{"h1"}, "ALPN identifier for this service")
35 - flags.IntVar(&flagAdminPort, "admin-port", 0, "optional admin UI port (0 to disable)")
35 + flags.IntVar(&flagPort, "port", 4018, "demo app port")
36 }
37
38 func main() {
@@ -81,8 +81,8 @@ func runClient(cmd *cobra.Command, args []string) error {
81
82 // Optional local admin UI
83 var adminSrv *http.Server
84 - if flagAdminPort > 0 {
85 - adminSrv = serveClientHTTP(ctx, fmt.Sprintf(":%d", flagAdminPort), cred.ID(), flagName, flagALPNs, flagBootstraps, client.GetRelays, stop)
84 + if flagPort > 0 {
85 + adminSrv = serveClientHTTP(ctx, fmt.Sprintf(":%d", flagPort), cred.ID(), flagName, flagALPNs, flagBootstraps, client.GetRelays, stop)
86 }
87
88 // Serve HTTP over relay listener
cmd/relay-server/main.go
+7 -5
@@ -21,14 +21,16 @@ var rootCmd = &cobra.Command{
21 }
22
23 var (
24 - flagPort int // admin UI + HTTP proxy port (e.g. 4017)
25 - bootstraps []string
24 + flagBootstraps []string
25 + flagALPN string
26 + flagPort int
27 )
28
29 func init() {
30 flags := rootCmd.PersistentFlags()
31 + flags.StringArrayVar(&flagBootstraps, "bootstraps", nil, "bootstrap addresses")
32 + flags.StringVar(&flagALPN, "alpn", "h1", "ALPN identifier for this service")
33 flags.IntVar(&flagPort, "port", 4017, "admin UI and HTTP proxy port")
31 - flags.StringArrayVar(&bootstraps, "bootstraps", nil, "bootstrap addresses")
34 }
35
36 func main() {
@@ -46,12 +48,12 @@ func runServer(cmd *cobra.Command, args []string) error {
48 return err
49 }
50
49 - serv := relaydns.NewRelayServer(cred, bootstraps)
51 + serv := relaydns.NewRelayServer(cred, flagBootstraps)
52 serv.Start()
53 defer serv.Stop()
54
55 // Admin UI + per-peer HTTP proxy
54 - httpSrv := serveHTTP(ctx, fmt.Sprintf(":%d", flagPort), serv, cred.ID(), bootstraps, stop)
56 + httpSrv := serveHTTP(ctx, fmt.Sprintf(":%d", flagPort), serv, cred.ID(), flagBootstraps, flagALPN, stop)
57
58 <-ctx.Done()
59 log.Info().Msg("[server] shutting down...")
cmd/relay-server/view.go
+6 -21
@@ -121,7 +121,7 @@ var wsUpgrader = websocket.Upgrader{
121 }
122
123 // serveHTTP builds the HTTP mux and returns the server.
124 -func serveHTTP(ctx context.Context, addr string, serv *relaydns.RelayServer, nodeID string, bootstraps []string, cancel context.CancelFunc) *http.Server {
124 +func serveHTTP(ctx context.Context, addr string, serv *relaydns.RelayServer, nodeID string, bootstraps []string, alpn string, cancel context.CancelFunc) *http.Server {
125 if addr == "" {
126 addr = ":0"
127 }
@@ -182,13 +182,6 @@ func serveHTTP(ctx context.Context, addr string, serv *relaydns.RelayServer, nod
182 // Create a reverse proxy whose transport dials via RelayDNS to the lease
183 target, _ := url.Parse("http://relay-peer")
184 proxy := httputil.NewSingleHostReverseProxy(target)
185 - proxy.Director = func(req *http.Request) {
186 - // Preserve original method, headers, query; rewrite URL to dummy host
187 - req.URL.Scheme = "http"
188 - req.URL.Host = target.Host
189 - req.URL.Path = rest
190 - // Keep Host header as-is (or could clear)
191 - }
185 proxy.Transport = &http.Transport{
186 DialContext: func(c context.Context, network, address string) (net.Conn, error) {
187 // Create a fresh credential per dial
@@ -196,7 +189,7 @@ func serveHTTP(ctx context.Context, addr string, serv *relaydns.RelayServer, nod
189 if cerr != nil {
190 return nil, cerr
191 }
199 - return client.Dial(cred, leaseID, "h1")
192 + return client.Dial(cred, leaseID, alpn)
193 },
194 }
195
@@ -205,7 +198,10 @@ func serveHTTP(ctx context.Context, addr string, serv *relaydns.RelayServer, nod
198 http.Error(rw, "upstream error", http.StatusBadGateway)
199 }
200
208 - proxy.ServeHTTP(w, r)
201 + // Use default Director; adjust path on a shallow clone
202 + r2 := r.Clone(r.Context())
203 + r2.URL.Path = rest
204 + proxy.ServeHTTP(w, r2)
205 })
206
207 mux.HandleFunc("/relay", func(w http.ResponseWriter, r *http.Request) {
@@ -323,7 +319,6 @@ var serverTmpl = template.Must(template.New("admin-index").Parse(`<!doctype html
319 .pill.bad .dot { background:var(--bad) }
320 .head { display:flex; align-items:center; justify-content:space-between; gap:12px }
321 .btn { display:inline-block; background:var(--primary); color:#fff; text-decoration:none; border-radius:10px; padding:10px 14px; font-weight:800; margin-top:8px }
326 - .refresh-btn { background:var(--muted); font-size:12px; padding:6px 10px; margin-left:8px }
322 </style>
323 <script>
324 // Auto-refresh lease data every 5 seconds
@@ -400,16 +395,6 @@ var serverTmpl = template.Must(template.New("admin-index").Parse(`<!doctype html
395
396 // Set up interval for auto-refresh
397 setInterval(refreshLeases, 5000);
403 -
404 - // Add manual refresh button
405 - const title = document.querySelector('.title');
406 - if (title && title.textContent === 'Server') {
407 - const refreshBtn = document.createElement('button');
408 - refreshBtn.className = 'btn refresh-btn';
409 - refreshBtn.textContent = 'Refresh';
410 - refreshBtn.onclick = refreshLeases;
411 - title.parentNode.appendChild(refreshBtn);
412 - }
398 });
399 </script>
400 </head>