From 8e9543970a366639e466b3a7632f250d9de7a8c8 Mon Sep 17 00:00:00 2001 From: Eggbertx Date: Wed, 27 Dec 2023 17:07:33 -0800 Subject: [PATCH] Remove "Verbosity" config field and rename "DebugMode" to "Verbose" for enabling command line output on errors --- cmd/gochan/main.go | 17 +++++++++++++---- cmd/gochan/server.go | 4 ++-- pkg/config/config.go | 11 +++++++---- pkg/config/jsonvars_test.go | 1 - pkg/config/util.go | 13 +++++++------ pkg/gcsql/database.go | 2 +- pkg/gcsql/util.go | 2 +- pkg/gcutil/logger.go | 17 +++++++++++------ pkg/server/serverutil/antispam.go | 2 +- 9 files changed, 43 insertions(+), 26 deletions(-) diff --git a/cmd/gochan/main.go b/cmd/gochan/main.go index 288d04af..35649ff3 100644 --- a/cmd/gochan/main.go +++ b/cmd/gochan/main.go @@ -35,11 +35,17 @@ func main() { fmt.Printf("Starting gochan v%s\n", versionStr) config.InitConfig(versionStr) + config.SetVerbose(true) + uid, gid := config.GetUser() systemCritical := config.GetSystemCriticalConfig() - - err := gcplugin.LoadPlugins(systemCritical.Plugins) + err := gcutil.InitLogs(systemCritical.LogDir, true, uid, gid) if err != nil { + fmt.Println("Error opening logs:", err.Error()) + os.Exit(1) + } + + if err = gcplugin.LoadPlugins(systemCritical.Plugins); err != nil { gcutil.LogFatal().Err(err).Msg("failed loading plugins") } @@ -59,14 +65,13 @@ func main() { Msg("Connected to database") if err = gcsql.CheckAndInitializeDatabase(systemCritical.DBtype); err != nil { - fmt.Println("Failed to initialize the database:", err.Error()) gcutil.LogFatal().Err(err).Msg("Failed to initialize the database") } events.TriggerEvent("db-initialized") parseCommandLine() serverutil.InitMinifier() // posting.InitGeoIP() - // posting.InitCaptcha() + posting.InitCaptcha() if err = gctemplates.InitTemplates(); err != nil { fmt.Println("Failed initializing templates:", err.Error()) @@ -85,6 +90,10 @@ func main() { sc := make(chan os.Signal, 1) signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt) posting.InitPosting() + if err = gcutil.InitLogs(systemCritical.LogDir, systemCritical.Verbose, uid, gid); err != nil { + fmt.Println("Error opening logs:", err.Error()) + os.Exit(1) + } go initServer() <-sc } diff --git a/cmd/gochan/server.go b/cmd/gochan/server.go index 899eb853..a4599361 100755 --- a/cmd/gochan/server.go +++ b/cmd/gochan/server.go @@ -25,7 +25,7 @@ func initServer() { listener, err := net.Listen("tcp", systemCritical.ListenIP+":"+strconv.Itoa(systemCritical.Port)) if err != nil { - if !systemCritical.DebugMode { + if !systemCritical.Verbose { fmt.Printf("Failed listening on %s:%d: %s", systemCritical.ListenIP, systemCritical.Port, err.Error()) } gcutil.LogFatal().Err(err).Caller(). @@ -56,7 +56,7 @@ func initServer() { } if err != nil { - if !systemCritical.DebugMode { + if !systemCritical.Verbose { fmt.Println("Error initializing server:", err.Error()) } gcutil.Logger().Fatal(). diff --git a/pkg/config/config.go b/pkg/config/config.go index ffad76ad..9c13a775 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -164,7 +164,7 @@ type SystemCriticalConfig struct { DBpassword string DBprefix string - DebugMode bool + Verbose bool `json:"DebugMode"` RandomSeed string Version *GochanVersion `json:"-"` TimeZone int `json:"-"` @@ -185,7 +185,6 @@ type SiteConfig struct { MaxRecentPosts int RecentPostsWithNoFile bool - Verbosity int EnableAppeals bool MaxLogDays int @@ -374,8 +373,12 @@ func DeleteBoardConfig(dir string) { delete(boardConfigs, dir) } -func GetDebugMode() bool { - return cfg.testing || cfg.SystemCriticalConfig.DebugMode +func VerboseMode() bool { + return cfg.testing || cfg.SystemCriticalConfig.Verbose +} + +func SetVerbose(verbose bool) { + cfg.Verbose = verbose } func GetVersion() *GochanVersion { diff --git a/pkg/config/jsonvars_test.go b/pkg/config/jsonvars_test.go index 287c1c06..04122729 100644 --- a/pkg/config/jsonvars_test.go +++ b/pkg/config/jsonvars_test.go @@ -104,7 +104,6 @@ const ( "GeoIPDBlocation": "/usr/share/GeoIP/GeoIP.dat", "MaxRecentPosts": 12, "RecentPostsWithNoFile": false, - "Verbosity": 0, "EnableAppeals": true, "MaxLogDays": 14, "_comment": "Set RandomSeed to a (preferrably large) string of letters and numbers", diff --git a/pkg/config/util.go b/pkg/config/util.go index f870789b..c820b697 100644 --- a/pkg/config/util.go +++ b/pkg/config/util.go @@ -51,6 +51,12 @@ func (iv *InvalidValueError) Error() string { return str } +// GetUser returns the IDs of the user and group gochan should be acting as +// when creating files. If they are 0, it is using the current user +func GetUser() (int, int) { + return uid, gid +} + func TakeOwnership(fp string) (err error) { if runtime.GOOS == "windows" || fp == "" || cfg.Username == "" { // Chown returns an error in Windows so skip it, also skip if Username isn't set @@ -78,7 +84,6 @@ func InitConfig(versionStr string) { cfg.ListenIP = "127.0.0.1" cfg.Port = 8080 cfg.UseFastCGI = true - cfg.DebugMode = true cfg.testing = true cfg.TemplateDir = "templates" cfg.DBtype = "sqlite3" @@ -89,7 +94,7 @@ func InitConfig(versionStr string) { cfg.RandomSeed = "test" cfg.Version = ParseVersion(versionStr) cfg.SiteSlogan = "Gochan testing" - cfg.Verbosity = 1 + cfg.Verbose = true cfg.Captcha.OnlyNeededForThreads = true cfg.Cooldowns = BoardCooldowns{0, 0, 0} cfg.BanColors = []string{ @@ -161,10 +166,6 @@ func InitConfig(versionStr string) { } cfg.LogDir = gcutil.FindResource(cfg.LogDir, "log", "/var/log/gochan/") - if err = gcutil.InitLogs(cfg.LogDir, cfg.DebugMode, uid, gid); err != nil { - fmt.Println("Error opening logs:", err.Error()) - os.Exit(1) - } if cfg.Port == 0 { cfg.Port = 80 diff --git a/pkg/gcsql/database.go b/pkg/gcsql/database.go index ccd85e65..4ecd2579 100644 --- a/pkg/gcsql/database.go +++ b/pkg/gcsql/database.go @@ -259,7 +259,7 @@ func sqlVersionError(err error, dbDriver string, query *string) error { return err } } - if config.GetSystemCriticalConfig().DebugMode { + if config.GetSystemCriticalConfig().Verbose { return fmt.Errorf(UnsupportedSQLVersionMsg+"\nQuery: "+*query, errText) } return fmt.Errorf(UnsupportedSQLVersionMsg, errText) diff --git a/pkg/gcsql/util.go b/pkg/gcsql/util.go index 68af5d96..56dd65ee 100644 --- a/pkg/gcsql/util.go +++ b/pkg/gcsql/util.go @@ -63,7 +63,7 @@ func SetupSQLString(query string, dbConn *GCDB) (string, error) { } prepared = strings.Join(arr, "") case "sqlmock": - if config.GetDebugMode() { + if config.VerboseMode() { prepared = query break } diff --git a/pkg/gcutil/logger.go b/pkg/gcutil/logger.go index 39ce4d9e..eb69150d 100644 --- a/pkg/gcutil/logger.go +++ b/pkg/gcutil/logger.go @@ -57,8 +57,10 @@ func LogDiscard(events ...*zerolog.Event) { func initLog(logPath string, debug bool) (err error) { if logFile != nil { - // log file already initialized, skip - return nil + // log already initialized + if err = logFile.Close(); err != nil { + return err + } } logFile, err = os.OpenFile(logPath, logFlags, logFileMode) // skipcq: GSC-G302 if err != nil { @@ -77,8 +79,10 @@ func initLog(logPath string, debug bool) (err error) { func initAccessLog(logPath string) (err error) { if accessFile != nil { - // access log already initialized, skip - return nil + // access log already initialized, close it first before reopening + if err = accessFile.Close(); err != nil { + return err + } } accessFile, err = os.OpenFile(logPath, logFlags, logFileMode) // skipcq: GSC-G302 if err != nil { @@ -88,8 +92,8 @@ func initAccessLog(logPath string) (err error) { return nil } -func InitLogs(logDir string, debug bool, uid int, gid int) (err error) { - if err = initLog(path.Join(logDir, "gochan.log"), debug); err != nil { +func InitLogs(logDir string, verbose bool, uid int, gid int) (err error) { + if err = initLog(path.Join(logDir, "gochan.log"), verbose); err != nil { return err } if err = logFile.Chown(uid, gid); err != nil { @@ -144,6 +148,7 @@ func LogDebug() *zerolog.Event { } func CloseLog() error { + if logFile == nil { return nil } diff --git a/pkg/server/serverutil/antispam.go b/pkg/server/serverutil/antispam.go index 7d41289d..8d0610a9 100644 --- a/pkg/server/serverutil/antispam.go +++ b/pkg/server/serverutil/antispam.go @@ -11,7 +11,7 @@ import ( // ValidReferer checks to make sure that the incoming request is from the same domain (or if debug mode is enabled) func ValidReferer(request *http.Request) bool { - if config.GetDebugMode() { + if config.VerboseMode() { return true } referer := request.Referer()