mirror of
https://github.com/speatzle/nfsense.git
synced 2025-05-10 18:38:22 +00:00
55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
package server
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"golang.org/x/exp/slog"
|
|
|
|
"nfsense.net/nfsense/internal/config"
|
|
"nfsense.net/nfsense/internal/jsonrpc"
|
|
"nfsense.net/nfsense/internal/session"
|
|
)
|
|
|
|
var server http.Server
|
|
var mux = http.NewServeMux()
|
|
var apiHandler *jsonrpc.Handler
|
|
var stopCleanup chan struct{}
|
|
var configManager *config.ConfigManager
|
|
|
|
func StartWebserver(_configManager *config.ConfigManager, _apiHandler *jsonrpc.Handler) {
|
|
server.Addr = ":8080"
|
|
server.Handler = mux
|
|
apiHandler = _apiHandler
|
|
configManager = _configManager
|
|
|
|
// Routing
|
|
mux.HandleFunc("/login", HandleLogin)
|
|
mux.HandleFunc("/logout", HandleLogout)
|
|
mux.HandleFunc("/session", HandleSession)
|
|
mux.HandleFunc("/api", HandleAPI)
|
|
mux.HandleFunc("/ws/api", HandleWebsocketAPI)
|
|
mux.HandleFunc("/", HandleWebinterface)
|
|
|
|
stopCleanup = make(chan struct{})
|
|
|
|
go session.CleanupSessions(stopCleanup)
|
|
|
|
go func() {
|
|
if err := server.ListenAndServe(); !errors.Is(err, http.ErrServerClosed) {
|
|
slog.Error("Webserver error", "err", err)
|
|
}
|
|
slog.Info("Webserver Stopped")
|
|
}()
|
|
}
|
|
|
|
func ShutdownWebserver(ctx context.Context) error {
|
|
stopCleanup <- struct{}{}
|
|
err := server.Shutdown(ctx)
|
|
if err != nil {
|
|
return fmt.Errorf("Shutting down: %w", err)
|
|
}
|
|
return nil
|
|
}
|