forked from rosa/hakurei
98 lines
2.8 KiB
Go
98 lines
2.8 KiB
Go
//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)
|
|
}
|