//go:build frontend && frontend_test package main import ( "embed" "net/http" "path" "strings" ) //go:generate tsc -p ui_test //go:generate sass ui_test/lib/ui.scss ui_test/lib/ui.css //go:embed ui_test/* var test_content embed.FS func serveTestWebUI(w http.ResponseWriter, r *http.Request) { w.Header().Set("X-Content-Type-Options", "nosniff") w.Header().Set("X-XSS-Protection", "1") w.Header().Set("X-Frame-Options", "DENY") http.ServeFileFS(w, r, test_content, "ui_test/lib/ui.html") } func serveTestWebUIStaticContent(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case "/testui/style.css": http.ServeFileFS(w, r, test_content, "ui_test/lib/ui.css") case "/testui/skip-closed.svg": http.ServeFileFS(w, r, test_content, "ui_test/lib/skip-closed.svg") case "/testui/skip-open.svg": http.ServeFileFS(w, r, test_content, "ui_test/lib/skip-open.svg") case "/testui/success-closed.svg": http.ServeFileFS(w, r, test_content, "ui_test/lib/success-closed.svg") case "/testui/success-open.svg": http.ServeFileFS(w, r, test_content, "ui_test/lib/success-open.svg") case "/testui/failure-closed.svg": http.ServeFileFS(w, r, test_content, "ui_test/lib/failure-closed.svg") case "/testui/failure-open.svg": http.ServeFileFS(w, r, test_content, "ui_test/lib/failure-open.svg") default: http.NotFound(w, r) } } func serveTestLibrary(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case "/test/lib/test.js": http.ServeFileFS(w, r, test_content, "ui_test/lib/test.js") default: http.NotFound(w, r) } } func serveTests(w http.ResponseWriter, r *http.Request) { if r.URL.Path == "/test/" { http.Redirect(w, r, "/test.html", http.StatusMovedPermanently) return } testPath := strings.TrimPrefix(r.URL.Path, "/test/") if path.Ext(testPath) != ".js" { http.Error(w, "403 forbidden", http.StatusForbidden) } w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") w.Header().Set("Pragma", "no-cache") w.Header().Set("Expires", "0") http.ServeFileFS(w, r, test_content, "ui_test/"+testPath) } func redirectUI(w http.ResponseWriter, r *http.Request) { // The base path should not redirect to the root. if r.URL.Path == "/ui/" { http.NotFound(w, r) return } if path.Ext(r.URL.Path) != ".js" { http.Error(w, "403 forbidden", http.StatusForbidden) return } w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") w.Header().Set("Pragma", "no-cache") w.Header().Set("Expires", "0") http.Redirect(w, r, strings.TrimPrefix(r.URL.Path, "/ui"), http.StatusFound) } func testUiRoutes(mux *http.ServeMux) { mux.HandleFunc("GET /test.html", serveTestWebUI) mux.HandleFunc("GET /testui/", serveTestWebUIStaticContent) mux.HandleFunc("GET /test/lib", serveTestLibrary) mux.HandleFunc("GET /test/", serveTests) mux.HandleFunc("GET /ui/", redirectUI) }