diff --git a/klice.go b/klice.go index abbcc4d..5e9f4c4 100644 --- a/klice.go +++ b/klice.go @@ -66,7 +66,7 @@ func loginHandler(w http.ResponseWriter, r *http.Request) { } } case http.MethodGet: - http.ServeFile(w, r, "templates/login.html") + http.ServeFileFS(w, r, templatesFS, "templates/login.html") default: http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) } @@ -146,8 +146,8 @@ func teamInfoHandler(w http.ResponseWriter, r *http.Request) { } func qrHandler(w http.ResponseWriter, r *http.Request) { - uid, found := strings.CutPrefix(r.URL.Path, "/qr/") - if !found || uid == "" { + uid := r.PathValue("qr") + if uid == "" { http.Error(w, "Invalid QR code", http.StatusBadRequest) return } @@ -354,7 +354,7 @@ func main() { http.HandleFunc("/admin/levels", AdminLevelHandler) http.HandleFunc("/admin/cipher", AdminCipherHandler) http.HandleFunc("/admin/positions", AdminPositionsHandler) - http.HandleFunc("/admin/qr", AdminQRHandler) + http.HandleFunc("/admin/qr/{qr...}", AdminQRHandler) http.HandleFunc("/admin/penalties", AdminPenaltiesHandler) // static files diff --git a/templates.go b/templates.go index c63ac32..c7ab84e 100644 --- a/templates.go +++ b/templates.go @@ -1,9 +1,13 @@ package main import ( + "embed" "html/template" ) +//go:embed templates/*.html +var templatesFS embed.FS + type CipherTemplateS struct { ID int Order uint @@ -86,12 +90,12 @@ type AdminPenaltiesTemplateS struct { Minutes int } -var CipherTemplate = template.Must(template.ParseFiles("templates/assignment.html")) -var TeamTemplate = template.Must(template.ParseFiles("templates/team.html")) -var AdminTeamsTemplate = template.Must(template.ParseFiles("templates/adminTeams.html")) -var AdminRoutesTemplate = template.Must(template.ParseFiles("templates/adminRoutes.html")) -var AdminLevelTemplate = template.Must(template.ParseFiles("templates/adminLevels.html")) -var AdminCipherTemplate = template.Must(template.ParseFiles("templates/adminCiphers.html")) -var AdminPositionsTemplate = template.Must(template.ParseFiles("templates/adminPositions.html")) -var AdminQRsTemplate = template.Must(template.ParseFiles("templates/adminQR.html")) -var AdminPenaltiesTemplate = template.Must(template.ParseFiles("templates/adminPenalties.html")) +var CipherTemplate = template.Must(template.ParseFS(templatesFS, "templates/assignment.html")) +var TeamTemplate = template.Must(template.ParseFS(templatesFS, "templates/team.html")) +var AdminTeamsTemplate = template.Must(template.ParseFS(templatesFS, "templates/adminTeams.html")) +var AdminRoutesTemplate = template.Must(template.ParseFS(templatesFS, "templates/adminRoutes.html")) +var AdminLevelTemplate = template.Must(template.ParseFS(templatesFS, "templates/adminLevels.html")) +var AdminCipherTemplate = template.Must(template.ParseFS(templatesFS, "templates/adminCiphers.html")) +var AdminPositionsTemplate = template.Must(template.ParseFS(templatesFS, "templates/adminPositions.html")) +var AdminQRsTemplate = template.Must(template.ParseFS(templatesFS, "templates/adminQR.html")) +var AdminPenaltiesTemplate = template.Must(template.ParseFS(templatesFS, "templates/adminPenalties.html"))