fix: viewer port starts/stops dynamically on config save, auth bypass removed

This commit is contained in:
Claus Lohmar 2026-08-06 18:52:02 +01:00
parent 2032402597
commit 72e936d3f1
2 changed files with 23 additions and 7 deletions

23
main.go
View file

@ -8,6 +8,7 @@ package main
import (
"fmt"
"log"
"net/http"
"os"
"os/signal"
"syscall"
@ -82,8 +83,19 @@ func main() {
if app.go2rtc != nil { app.go2rtc.Stop() }
if app.snapshots != nil { app.snapshots.StopAll() }
if app.recorder != nil { app.recorder.StopAll() }
// Restart with the updated config from the server's in-memory copy.
// Handle viewer server toggle.
liveCfg := app.server.appConfig
if liveCfg.Auth.Viewer.Enabled && app.viewerSrv == nil {
go func() {
v, err := app.server.StartViewerServer()
if err != nil { log.Printf("Viewer server: %v", err) }
app.viewerSrv = v
}()
} else if !liveCfg.Auth.Viewer.Enabled && app.viewerSrv != nil {
log.Println("Stopping viewer server...")
app.viewerSrv.Close()
app.viewerSrv = nil
}
if liveCfg.Go2RTC.Enabled {
app.go2rtc = NewGo2RTCManager(liveCfg.Go2RTC)
app.go2rtc.Start(liveCfg.Cameras)
@ -104,9 +116,11 @@ func main() {
// Start viewer server only if enabled.
if cfg.Auth.Viewer.Enabled {
go func() {
if err := app.server.StartViewerServer(); err != nil {
v, err := app.server.StartViewerServer()
if err != nil {
log.Printf("Viewer server: %v", err)
}
app.viewerSrv = v
}()
} else {
log.Println("Viewer server: disabled in config")
@ -156,6 +170,7 @@ type App struct {
snapshots *SnapshotEngine
recorder *RecorderManager
cleaner *Cleaner
viewerSrv *http.Server
}
// StartServer initializes and starts the HTTP server.
@ -169,9 +184,9 @@ func (a *App) StartServer() error {
}
// StartViewerServer launches the viewer-only server.
func (a *App) StartViewerServer() error {
func (a *App) StartViewerServer() (*http.Server, error) {
if a.server == nil {
return fmt.Errorf("main server not initialized")
return nil, fmt.Errorf("main server not initialized")
}
return a.server.StartViewerServer()
}

View file

@ -60,16 +60,17 @@ func (s *Server) ListenAndServe() error {
}
// StartViewerServer launches the viewer-only server on the configured port.
func (s *Server) StartViewerServer() error {
func (s *Server) StartViewerServer() (*http.Server, error) {
viewerAddr := s.config.Server.BindHost + s.config.Server.ViewerPort
if viewerAddr == "" || viewerAddr == ":0" || viewerAddr == ":" {
return nil // viewer port not configured
return nil, nil
}
viewerMux := http.NewServeMux()
viewerMux.Handle("/", s.middleware(s.viewerOnly(s.mux)))
v := &http.Server{Addr: viewerAddr, Handler: viewerMux}
log.Printf("Viewer server listening on %s (live wall only, no auth)", viewerAddr)
return http.ListenAndServe(viewerAddr, viewerMux)
return v, v.ListenAndServe()
}
// Close shuts down the HTTP server.