83 lines
2.3 KiB
Go
83 lines
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"log/slog"
|
|
"net/http"
|
|
"os"
|
|
"time"
|
|
|
|
"gitea.henriburau.de/haw-lan/cod4watcher/models"
|
|
"gitea.henriburau.de/haw-lan/cod4watcher/routes"
|
|
"gitea.henriburau.de/haw-lan/cod4watcher/services"
|
|
"github.com/go-chi/chi"
|
|
"github.com/joho/godotenv"
|
|
)
|
|
|
|
func main() {
|
|
if err := godotenv.Load(); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
router := chi.NewMux()
|
|
|
|
persistence, err := models.NewSQLitePersistence("local.db")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
cs := services.NewCaptureService(persistence)
|
|
|
|
cod4StatusProvider := &models.CoD4UdpClient{}
|
|
|
|
cachedProvider, err := models.NewCachedProvider(cod4StatusProvider)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
cod4Service, err := services.NewCoD4Server(cachedProvider)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
server := routes.NewServer(cs, cod4Service)
|
|
|
|
doneChan := make(chan bool)
|
|
scanner, err := services.NewScanner(persistence, cachedProvider, time.Second*10, doneChan)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
go scanner.Scan()
|
|
|
|
router.Use(routes.PathMiddleware, routes.AuthMiddleware)
|
|
router.Handle("/*", public())
|
|
router.Get("/health", routes.Make(server.HandleHealth))
|
|
router.Get("/server/status", routes.Make(server.HandleServerStatus))
|
|
router.Get("/captures/{captureID}", routes.Make(server.HandleCapture))
|
|
router.Get("/captures/{captureID}/table", routes.Make(server.HandleCaptureTable))
|
|
router.Get("/login", routes.Make(server.HandleLogin))
|
|
router.Get("/logout", routes.Make(server.HandleLogout))
|
|
router.Group(func(r chi.Router) {
|
|
r.Use(routes.OnlyAuthenticatedMiddleware)
|
|
|
|
r.Delete("/captures/{captureID}", routes.Make(server.HandleCaptureDelete))
|
|
r.Get("/captures/{captureID}/start", routes.Make(server.HandleCaptureStart))
|
|
r.Get("/captures/{captureID}/stop", routes.Make(server.HandleCaptureStop))
|
|
r.Post("/new/capture", routes.Make(server.HandleCaptureCreate))
|
|
r.Get("/new/capture", routes.Make(server.HandleCaptureForm))
|
|
})
|
|
router.Post("/signin", routes.Make(server.HandleSignin))
|
|
router.Get("/", routes.Make(server.HandleHome))
|
|
|
|
listenAddr := os.Getenv("LISTEN_ADDR")
|
|
slog.Info("HTTP server started", "listenAddr", listenAddr)
|
|
http.ListenAndServe(listenAddr, router)
|
|
}
|
|
|
|
func public() http.Handler {
|
|
fmt.Println("building static files for development")
|
|
return http.StripPrefix("/assets/", http.FileServerFS(os.DirFS("assets")))
|
|
}
|