fix: viewer port starts/stops dynamically on config save, auth bypass removed
This commit is contained in:
parent
2032402597
commit
72e936d3f1
2 changed files with 23 additions and 7 deletions
23
main.go
23
main.go
|
|
@ -8,6 +8,7 @@ package main
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
@ -82,8 +83,19 @@ func main() {
|
||||||
if app.go2rtc != nil { app.go2rtc.Stop() }
|
if app.go2rtc != nil { app.go2rtc.Stop() }
|
||||||
if app.snapshots != nil { app.snapshots.StopAll() }
|
if app.snapshots != nil { app.snapshots.StopAll() }
|
||||||
if app.recorder != nil { app.recorder.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
|
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 {
|
if liveCfg.Go2RTC.Enabled {
|
||||||
app.go2rtc = NewGo2RTCManager(liveCfg.Go2RTC)
|
app.go2rtc = NewGo2RTCManager(liveCfg.Go2RTC)
|
||||||
app.go2rtc.Start(liveCfg.Cameras)
|
app.go2rtc.Start(liveCfg.Cameras)
|
||||||
|
|
@ -104,9 +116,11 @@ func main() {
|
||||||
// Start viewer server only if enabled.
|
// Start viewer server only if enabled.
|
||||||
if cfg.Auth.Viewer.Enabled {
|
if cfg.Auth.Viewer.Enabled {
|
||||||
go func() {
|
go func() {
|
||||||
if err := app.server.StartViewerServer(); err != nil {
|
v, err := app.server.StartViewerServer()
|
||||||
|
if err != nil {
|
||||||
log.Printf("Viewer server: %v", err)
|
log.Printf("Viewer server: %v", err)
|
||||||
}
|
}
|
||||||
|
app.viewerSrv = v
|
||||||
}()
|
}()
|
||||||
} else {
|
} else {
|
||||||
log.Println("Viewer server: disabled in config")
|
log.Println("Viewer server: disabled in config")
|
||||||
|
|
@ -156,6 +170,7 @@ type App struct {
|
||||||
snapshots *SnapshotEngine
|
snapshots *SnapshotEngine
|
||||||
recorder *RecorderManager
|
recorder *RecorderManager
|
||||||
cleaner *Cleaner
|
cleaner *Cleaner
|
||||||
|
viewerSrv *http.Server
|
||||||
}
|
}
|
||||||
|
|
||||||
// StartServer initializes and starts the HTTP server.
|
// StartServer initializes and starts the HTTP server.
|
||||||
|
|
@ -169,9 +184,9 @@ func (a *App) StartServer() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// StartViewerServer launches the viewer-only server.
|
// StartViewerServer launches the viewer-only server.
|
||||||
func (a *App) StartViewerServer() error {
|
func (a *App) StartViewerServer() (*http.Server, error) {
|
||||||
if a.server == nil {
|
if a.server == nil {
|
||||||
return fmt.Errorf("main server not initialized")
|
return nil, fmt.Errorf("main server not initialized")
|
||||||
}
|
}
|
||||||
return a.server.StartViewerServer()
|
return a.server.StartViewerServer()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -60,16 +60,17 @@ func (s *Server) ListenAndServe() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// StartViewerServer launches the viewer-only server on the configured port.
|
// 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
|
viewerAddr := s.config.Server.BindHost + s.config.Server.ViewerPort
|
||||||
if viewerAddr == "" || viewerAddr == ":0" || viewerAddr == ":" {
|
if viewerAddr == "" || viewerAddr == ":0" || viewerAddr == ":" {
|
||||||
return nil // viewer port not configured
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
viewerMux := http.NewServeMux()
|
viewerMux := http.NewServeMux()
|
||||||
viewerMux.Handle("/", s.middleware(s.viewerOnly(s.mux)))
|
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)
|
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.
|
// Close shuts down the HTTP server.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue