fix init overlay
rabbitprincess committed
Mar 30, 2026 at 00:05 UTC
1a892ab716d3726b39dbe780ddfe502b74b65190
1 file changed
+28
-27
portal/server.go
+28
-27
@@ -231,39 +231,14 @@ func (s *Server) Start(ctx context.Context, apiMux *http.ServeMux) error {
231
s.group = group
232
233
if s.wgConfig.PrivateKey != "" {
234
- var snapshot map[string]types.RelayState
235
- if s.relaySet != nil {
236
- snapshot = s.relaySet.Snapshot()
237
- }
238
- peerMux := http.NewServeMux()
239
- peerMux.HandleFunc(types.PathRoot, s.handleRoot)
240
- peerMux.HandleFunc(types.PathHealthz, s.handleHealthz)
241
- peerMux.HandleFunc(types.PathDiscovery, func(w http.ResponseWriter, r *http.Request) {
242
- if !s.DiscoveryEnabled() {
243
- http.NotFound(w, r)
244
- return
245
- }
246
- s.handleRelayDiscovery(w, r)
247
- })
248
- overlay, err := wireguard.NewOverlay(s.wgConfig, peerMux)
249
- if err != nil {
234
+ if err := s.startOverlay(); err != nil {
235
acmeManager.Stop()
236
_ = apiServer.Close()
237
_ = apiCloser.Close()
238
_ = sniListener.Close()
239
cancel()
255
- return fmt.Errorf("start wireguard overlay: %w", err)
256
- }
257
- if err := overlay.Sync(s.cfg.PortalURL, snapshot); err != nil {
258
- acmeManager.Stop()
259
- _ = apiServer.Close()
260
- _ = apiCloser.Close()
261
- _ = sniListener.Close()
262
- _ = overlay.Shutdown(context.Background())
263
- cancel()
264
- return fmt.Errorf("sync wireguard peers: %w", err)
240
+ return err
241
}
266
- s.overlay = overlay
242
}
243
244
group.Go(s.runAPIServer)
@@ -516,6 +491,32 @@ func (s *Server) runSNIListener(ctx context.Context) error {
491
}
492
}
493
494
+func (s *Server) startOverlay() error {
495
+ peerMux := http.NewServeMux()
496
+ peerMux.HandleFunc(types.PathRoot, s.handleRoot)
497
+ peerMux.HandleFunc(types.PathHealthz, s.handleHealthz)
498
+ peerMux.HandleFunc(types.PathDiscovery, func(w http.ResponseWriter, r *http.Request) {
499
+ if !s.DiscoveryEnabled() {
500
+ http.NotFound(w, r)
501
+ return
502
+ }
503
+ s.handleRelayDiscovery(w, r)
504
+ })
505
+
506
+ overlay, err := wireguard.NewOverlay(s.wgConfig, peerMux)
507
+ if err != nil {
508
+ return fmt.Errorf("start wireguard overlay: %w", err)
509
+ }
510
+
511
+ if err := overlay.Sync(s.cfg.PortalURL, s.relaySet.Snapshot()); err != nil {
512
+ _ = overlay.Shutdown(context.Background())
513
+ return fmt.Errorf("sync wireguard peers: %w", err)
514
+ }
515
+
516
+ s.overlay = overlay
517
+ return nil
518
+}
519
+
520
func (s *Server) startQUICTunnelListener(apiTLS keyless.TLSMaterialConfig) error {
521
if len(apiTLS.KeyPEM) == 0 {
522
return fmt.Errorf("quic tunnel requires api tls key")