148 lines
3.5 KiB
Go
148 lines
3.5 KiB
Go
package routes
|
|
|
|
import (
|
|
"net/http"
|
|
"strconv"
|
|
"time"
|
|
|
|
"gitea.henriburau.de/haw-lan/cod4watcher/models"
|
|
"gitea.henriburau.de/haw-lan/cod4watcher/views/capture"
|
|
"gitea.henriburau.de/haw-lan/cod4watcher/views/components"
|
|
"github.com/go-chi/chi"
|
|
)
|
|
|
|
func (s *Server) HandleCapture(w http.ResponseWriter, r *http.Request) error {
|
|
captureString := chi.URLParam(r, "captureID")
|
|
captureID, err := strconv.ParseInt(captureString, 10, 64)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
foundCapture, err := s.cs.GetCaptureById(r.Context(), captureID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return Render(w, r, capture.Capture(foundCapture, *foundCapture.MapScores.BuildTable()))
|
|
}
|
|
|
|
func (s *Server) HandleCaptureTable(w http.ResponseWriter, r *http.Request) error {
|
|
captureString := chi.URLParam(r, "captureID")
|
|
captureID, err := strconv.ParseInt(captureString, 10, 64)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
foundCapture, err := s.cs.GetCaptureById(r.Context(), captureID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return Render(w, r, components.CaptureTable(*foundCapture.MapScores.BuildTable()))
|
|
}
|
|
|
|
func (s *Server) HandleCaptureStart(w http.ResponseWriter, r *http.Request) error {
|
|
captureString := chi.URLParam(r, "captureID")
|
|
captureID, err := strconv.ParseInt(captureString, 10, 64)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = s.cs.StartCapture(r.Context(), captureID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return hxRedirect(w, r, "/")
|
|
}
|
|
|
|
func (s *Server) HandleCaptureStop(w http.ResponseWriter, r *http.Request) error {
|
|
captureString := chi.URLParam(r, "captureID")
|
|
captureID, err := strconv.ParseInt(captureString, 10, 64)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = s.cs.StopCapture(r.Context(), captureID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return hxRedirect(w, r, "/")
|
|
}
|
|
|
|
func (s *Server) HandleCaptureDelete(w http.ResponseWriter, r *http.Request) error {
|
|
captureString := chi.URLParam(r, "captureID")
|
|
captureID, err := strconv.ParseInt(captureString, 10, 64)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = s.cs.DeleteCapture(r.Context(), captureID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return hxRedirect(w, r, "/")
|
|
}
|
|
|
|
func (s *Server) HandleCaptureForm(w http.ResponseWriter, r *http.Request) error {
|
|
return Render(w, r, capture.CaptureForm(capture.CaptureFormValues{}, map[string]string{}))
|
|
}
|
|
|
|
func (s *Server) HandleCaptureCreate(w http.ResponseWriter, r *http.Request) error {
|
|
formValues, errors := parseCaptureFormAndValidate(r)
|
|
if len(errors) > 0 {
|
|
return Render(w, r, capture.CaptureForm(formValues, errors))
|
|
}
|
|
|
|
newCapture := &models.Capture{
|
|
Host: formValues.Host,
|
|
Port: formValues.Port,
|
|
Name: formValues.Name,
|
|
Active: true,
|
|
Start: time.Now(),
|
|
}
|
|
|
|
_, err := s.c4s.GetServerStatus(newCapture.Host, newCapture.Port)
|
|
if err != nil {
|
|
errors["host"] = err.Error()
|
|
errors["port"] = err.Error()
|
|
|
|
return Render(w, r, capture.CaptureForm(formValues, errors))
|
|
}
|
|
|
|
err = s.cs.CreateCapture(r.Context(), newCapture)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return hxRedirect(w, r, "/")
|
|
}
|
|
|
|
func parseCaptureFormAndValidate(r *http.Request) (capture.CaptureFormValues, map[string]string) {
|
|
r.ParseForm()
|
|
|
|
formValues := capture.CaptureFormValues{
|
|
Host: r.FormValue("host"),
|
|
Port: r.FormValue("port"),
|
|
Name: r.FormValue("name"),
|
|
}
|
|
|
|
errors := map[string]string{}
|
|
|
|
if len(formValues.Host) <= 0 {
|
|
errors["host"] = "Host needs to be set"
|
|
}
|
|
|
|
if len(formValues.Port) <= 0 {
|
|
errors["port"] = "Port needs to be set"
|
|
}
|
|
|
|
if len(formValues.Name) < 5 || len(formValues.Name) > 50 {
|
|
errors["name"] = "Name needs to be between 5 and 50 characters long"
|
|
}
|
|
|
|
return formValues, errors
|
|
}
|