From 2ade4a186e12960aef9d2e9f5d06439c85bb481e Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sat, 05 Apr 2025 20:30:00 +0800 Subject: [PATCH] source/static-Handler shall no longer be global variables --- git2d_deploy.go | 2 +- git_hooks_deploy.go | 2 +- http_server.go | 4 ++-- main.go | 11 +++++++++++ resources.go | 26 ++++---------------------- server.go | 9 ++++++++- diff --git a/git2d_deploy.go b/git2d_deploy.go index f3a4cc9f6f3d8c146084d596085f4260e162e9ca..ba63a1b6d4c603ae6426135646037287a2f5d1db 100644 --- a/git2d_deploy.go +++ b/git2d_deploy.go @@ -13,7 +13,7 @@ func (s *server) deployGit2D() (err error) { var srcFD fs.File var dstFD *os.File - if srcFD, err = resourcesFS.Open("git2d/git2d"); err != nil { + if srcFD, err = embeddedResourcesFS.Open("git2d/git2d"); err != nil { return err } defer srcFD.Close() diff --git a/git_hooks_deploy.go b/git_hooks_deploy.go index ea11d0c6c81bbbd1504e9e3559f60ff0043a71ae..0cfb4f9d4e97404c78ba6d26a4098302bc6e4197 100644 --- a/git_hooks_deploy.go +++ b/git_hooks_deploy.go @@ -19,7 +19,7 @@ err = func() (err error) { var srcFD fs.File var dstFD *os.File - if srcFD, err = resourcesFS.Open("hookc/hookc"); err != nil { + if srcFD, err = embeddedResourcesFS.Open("hookc/hookc"); err != nil { return err } defer srcFD.Close() diff --git a/http_server.go b/http_server.go index ae822417c9a742141cb506120d2d215d94080d18..7341929a17527572ebd102441abc22943e09d580 100644 --- a/http_server.go +++ b/http_server.go @@ -87,10 +87,10 @@ } switch segments[1] { case "static": - staticHandler.ServeHTTP(writer, request) + s.staticHandler.ServeHTTP(writer, request) return case "source": - sourceHandler.ServeHTTP(writer, request) + s.sourceHandler.ServeHTTP(writer, request) return } } diff --git a/main.go b/main.go index 452782595c8275a7ae11daad7fdde5a44413bd55..8eca6a73ef1ebba7bec17de706d58b06043649d7 100644 --- a/main.go +++ b/main.go @@ -6,6 +6,7 @@ import ( "errors" "flag" + "io/fs" "log" "log/slog" "net" @@ -25,6 +26,16 @@ ) flag.Parse() s := server{} + + s.sourceHandler = http.StripPrefix( + "/-/source/", + http.FileServer(http.FS(embeddedSourceFS)), + ) + staticFS, err := fs.Sub(embeddedResourcesFS, "static") + if err != nil { + panic(err) + } + s.staticHandler = http.StripPrefix("/-/static/", http.FileServer(http.FS(staticFS))) if err := s.loadConfig(*configPath); err != nil { slog.Error("loading configuration", "error", err) diff --git a/resources.go b/resources.go index 00d7b66c4b242bad8eb940610cb616b7a9f9dd72..b626f8d335af22dbbbc4cef24dd8be01d5bdd9e9 100644 --- a/resources.go +++ b/resources.go @@ -7,7 +7,6 @@ import ( "embed" "html/template" "io/fs" - "net/http" "github.com/tdewolff/minify/v2" "github.com/tdewolff/minify/v2/html" @@ -15,16 +14,11 @@ "go.lindenii.runxiyu.org/forge/misc" ) //go:embed LICENSE source.tar.gz -var sourceFS embed.FS - -var sourceHandler = http.StripPrefix( - "/-/source/", - http.FileServer(http.FS(sourceFS)), -) +var embeddedSourceFS embed.FS //go:embed templates/* static/* //go:embed hookc/hookc git2d/git2d -var resourcesFS embed.FS +var embeddedResourcesFS embed.FS var templates *template.Template @@ -45,12 +39,12 @@ "dereference_error": dereferenceOrZero[error], "minus": minus, }) - err = fs.WalkDir(resourcesFS, "templates", func(path string, d fs.DirEntry, err error) error { + err = fs.WalkDir(embeddedResourcesFS, "templates", func(path string, d fs.DirEntry, err error) error { if err != nil { return err } if !d.IsDir() { - content, err := fs.ReadFile(resourcesFS, path) + content, err := fs.ReadFile(embeddedResourcesFS, path) if err != nil { return err } @@ -69,15 +63,3 @@ return nil }) return err } - -var staticHandler http.Handler - -// This init sets up static handlers. The resulting handlers must be -// used in the HTTP router, and do nothing unless called from elsewhere. -func init() { - staticFS, err := fs.Sub(resourcesFS, "static") - if err != nil { - panic(err) - } - staticHandler = http.StripPrefix("/-/static/", http.FileServer(http.FS(staticFS))) -} diff --git a/server.go b/server.go index 1113740355878c7bcbfc56cf84ee1b0de4e4b554..7dbca974d320797eb49d430da5dba832d4b095a1 100644 --- a/server.go +++ b/server.go @@ -1,6 +1,10 @@ package main -import "github.com/jackc/pgx/v5/pgxpool" +import ( + "net/http" + + "github.com/jackc/pgx/v5/pgxpool" +) type server struct { config Config @@ -9,4 +13,7 @@ // database serves as the primary database handle for this entire application. // Transactions or single reads may be used from it. A [pgxpool.Pool] is // necessary to safely use pgx concurrently; pgx.Conn, etc. are insufficient. database *pgxpool.Pool + + sourceHandler http.Handler + staticHandler http.Handler } -- 2.48.1