forked from security/hakurei
56 lines
1.6 KiB
Go
56 lines
1.6 KiB
Go
package main
|
|
|
|
import (
|
|
"embed"
|
|
"fmt"
|
|
"net/http"
|
|
)
|
|
|
|
//go:generate sh -c "sass ui/static/dark.scss ui/static/dark.css && sass ui/static/light.scss ui/static/light.css && tsc ui/static/index.ts"
|
|
//go:embed ui/*
|
|
var content embed.FS
|
|
|
|
func serveWebUI(w http.ResponseWriter, r *http.Request) {
|
|
fmt.Printf("serveWebUI: %s\n", r.URL.Path)
|
|
w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate")
|
|
w.Header().Set("Pragma", "no-cache")
|
|
w.Header().Set("Expires", "0")
|
|
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, content, "ui/index.html")
|
|
}
|
|
func serveStaticContent(w http.ResponseWriter, r *http.Request) {
|
|
fmt.Printf("serveStaticContent: %s\n", r.URL.Path)
|
|
switch r.URL.Path {
|
|
case "/static/style.css":
|
|
darkTheme := r.CookiesNamed("dark_theme")
|
|
if len(darkTheme) > 0 && darkTheme[0].Value == "true" {
|
|
http.ServeFileFS(w, r, content, "ui/static/dark.css")
|
|
} else {
|
|
http.ServeFileFS(w, r, content, "ui/static/light.css")
|
|
}
|
|
break
|
|
case "/favicon.ico":
|
|
http.ServeFileFS(w, r, content, "ui/static/favicon.ico")
|
|
break
|
|
case "/static/index.js":
|
|
http.ServeFileFS(w, r, content, "ui/static/index.js")
|
|
break
|
|
default:
|
|
http.NotFound(w, r)
|
|
|
|
}
|
|
}
|
|
func serveAPI(w http.ResponseWriter, r *http.Request) {
|
|
|
|
}
|
|
func main() {
|
|
http.HandleFunc("GET /{$}", serveWebUI)
|
|
http.HandleFunc("GET /favicon.ico", serveStaticContent)
|
|
http.HandleFunc("GET /static/", serveStaticContent)
|
|
http.HandleFunc("GET /api/", serveAPI)
|
|
http.ListenAndServe(":8067", nil)
|
|
}
|