From 2d0ea5ba085f9caa84a7e7b1fd55f653834009aa Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sat, 05 Apr 2025 20:37:03 +0800 Subject: [PATCH] sshPubkey* shall no longer be global variables --- config.go | 2 +- git_misc.go | 2 +- http_global.go | 14 -------------- http_handle_repo_commit.go | 2 +- http_server.go | 2 +- main.go | 6 ++++++ resources.go | 2 +- server.go | 8 ++++++++ ssh_server.go | 12 +++--------- version.go | 2 +- diff --git a/config.go b/config.go index 773a223fac2c74d9f2d57662ef04130f8258b9a3..ec8daf8c4fdcea6eca760b8fc402d62ea87205d2 100644 --- a/config.go +++ b/config.go @@ -96,7 +96,7 @@ if s.database, err = pgxpool.New(context.Background(), s.config.DB.Conn); err != nil { return err } - globalData["forge_title"] = s.config.General.Title + s.globalData["forge_title"] = s.config.General.Title return nil } diff --git a/git_misc.go b/git_misc.go index 8dda01cd885ec7ea5a39096d47cf5e4809759ba7..17f834c6cce7e4665bb7cb30cb3e8cdd37dc84f3 100644 --- a/git_misc.go +++ b/git_misc.go @@ -247,4 +247,4 @@ } return } -var nullTree object.Tree +var nullTree object.Tree //nolint:gochecknoglobals diff --git a/http_global.go b/http_global.go deleted file mode 100644 index 6e236a7fd81acd911adb9e24efb611352d9bf6fd..0000000000000000000000000000000000000000 --- a/http_global.go +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-only -// SPDX-FileCopyrightText: Copyright (c) 2025 Runxi Yu - -package main - -// globalData is passed as "global" when rendering HTML templates and contains -// global data that should stay constant throughout an execution of Lindenii -// Forge as no synchronization mechanism is provided for updating it. -var globalData = map[string]any{ - "server_public_key_string": &serverPubkeyString, - "server_public_key_fingerprint": &serverPubkeyFP, - "forge_version": VERSION, - // Some other ones are populated after config parsing -} diff --git a/http_handle_repo_commit.go b/http_handle_repo_commit.go index 02121a288ba59681fb4d82dbc2d59c8303971cf9..a398dc2aa27e3163ac1b88627ac0173461e0d0ec 100644 --- a/http_handle_repo_commit.go +++ b/http_handle_repo_commit.go @@ -99,7 +99,7 @@ func (f fakeDiffFile) Path() string { return f.path } -var nullFakeDiffFile = fakeDiffFile{ +var nullFakeDiffFile = fakeDiffFile{ //nolint:gochecknoglobals hash: plumbing.NewHash("0000000000000000000000000000000000000000"), mode: misc.FirstOrPanic(filemode.New("100644")), path: "", diff --git a/http_server.go b/http_server.go index 7341929a17527572ebd102441abc22943e09d580..13ee4929b2c9fa782cd19c64faabd14bab29db63 100644 --- a/http_server.go +++ b/http_server.go @@ -50,7 +50,7 @@ } params["url_segments"] = segments params["dir_mode"] = dirMode - params["global"] = globalData + params["global"] = s.globalData var userID int // 0 for none userID, params["username"], err = s.getUserFromRequest(request) params["user_id"] = userID diff --git a/main.go b/main.go index 8eca6a73ef1ebba7bec17de706d58b06043649d7..2e1e094ddc0781116ed01f61c1fc3fa21cecdb44 100644 --- a/main.go +++ b/main.go @@ -36,6 +36,12 @@ if err != nil { panic(err) } s.staticHandler = http.StripPrefix("/-/static/", http.FileServer(http.FS(staticFS))) + s.globalData = map[string]any{ + "server_public_key_string": &s.serverPubkeyString, + "server_public_key_fingerprint": &s.serverPubkeyFP, + "forge_version": VERSION, + // Some other ones are populated after config parsing + } if err := s.loadConfig(*configPath); err != nil { slog.Error("loading configuration", "error", err) diff --git a/resources.go b/resources.go index b626f8d335af22dbbbc4cef24dd8be01d5bdd9e9..5ecb218e9b34f48bdb0c385312bb8c35f46b867b 100644 --- a/resources.go +++ b/resources.go @@ -20,7 +20,7 @@ //go:embed templates/* static/* //go:embed hookc/hookc git2d/git2d var embeddedResourcesFS embed.FS -var templates *template.Template +var templates *template.Template //nolint:gochecknoglobals // loadTemplates minifies and loads HTML templates. func loadTemplates() (err error) { diff --git a/server.go b/server.go index 30b39f11c09cc16f8d40f518c12e05c14470001f..71e123263da9783b7dc9bb537c3dd8eaa146604e 100644 --- a/server.go +++ b/server.go @@ -4,6 +4,7 @@ import ( "net/http" "github.com/jackc/pgx/v5/pgxpool" + goSSH "golang.org/x/crypto/ssh" ) type server struct { @@ -19,4 +20,11 @@ staticHandler http.Handler ircSendBuffered chan string ircSendDirectChan chan errorBack[string] + + // globalData is passed as "global" when rendering HTML templates. + globalData map[string]any + + serverPubkeyString string + serverPubkeyFP string + serverPubkey goSSH.PublicKey } diff --git a/ssh_server.go b/ssh_server.go index 9cb3062e1d8d01852d37755923e4a5f3eb4d9992..afb0d9501446c8f0f8f6827723d11392f19ff79c 100644 --- a/ssh_server.go +++ b/ssh_server.go @@ -16,12 +16,6 @@ "go.lindenii.runxiyu.org/forge/misc" goSSH "golang.org/x/crypto/ssh" ) -var ( - serverPubkeyString string - serverPubkeyFP string - serverPubkey goSSH.PublicKey -) - // serveSSH serves SSH on a [net.Listener]. The listener should generally be a // TCP listener, although AF_UNIX SOCK_STREAM listeners may be appropriate in // rare cases. @@ -39,9 +33,9 @@ if hostKey, err = goSSH.ParsePrivateKey(hostKeyBytes); err != nil { return err } - serverPubkey = hostKey.PublicKey() - serverPubkeyString = misc.BytesToString(goSSH.MarshalAuthorizedKey(serverPubkey)) - serverPubkeyFP = goSSH.FingerprintSHA256(serverPubkey) + s.serverPubkey = hostKey.PublicKey() + s.serverPubkeyString = misc.BytesToString(goSSH.MarshalAuthorizedKey(s.serverPubkey)) + s.serverPubkeyFP = goSSH.FingerprintSHA256(s.serverPubkey) server = &gliderSSH.Server{ Handler: func(session gliderSSH.Session) { diff --git a/version.go b/version.go index bfa4b96758e40bfc5d9a14ad8eba4b209c335924..c5e5aab92ffcd4881ab171bb314758feaeff8903 100644 --- a/version.go +++ b/version.go @@ -1,3 +1,3 @@ package main -var VERSION = "unknown" +var VERSION = "unknown" //nolint:gochecknoglobals -- 2.48.1