t2/main.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")))
}