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>