diff --git a/README.md b/README.md index dbb8277..d10186f 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ config ### Config options: Below are defaults of config.txt. The settings are defined in newline separated key=value pairs. -Please don't include the bash-style "comments" in your actual config, +Please don't include the bash-style "comments" in your config, they are provided purely for demonstration only and **will break the config if present**. ``` username=admin # Your username @@ -48,8 +48,7 @@ password=admin # Your password port=7101 # What port to run on (probably leave on 7101 if using docker) timezone=Local # IANA Time zone database identifier ("UTC", Local", "Europe/Moscow" etc.), Defaults to Local if can't parse. language=en # ISO-639 language code (currently supported - en, ru) -log_to_file=false # Whether to write logs to a file -log_file=config/log.txt # Where to store the log file if it is enabled +log_to_file=false # Whether to write logs to a file (located in /log.txt) enable_scram=false # Whether the app should shut down if there are 3 or more failed login attempts within 100 seconds # Not present by default, set only if you want to be notified of any failed login attempts over telegram @@ -74,6 +73,4 @@ If you for some reason decide to run plain executable instead of docker, it supp override password -port int override port --debug - show debug log ``` \ No newline at end of file diff --git a/TODO.md b/TODO.md index c966e04..2148394 100644 --- a/TODO.md +++ b/TODO.md @@ -8,6 +8,6 @@ List of things to add to this project * API revamp * Check export function for improvements * Customise log file -* More slog.Debug +* More slog.Debug and a debug flag? * Consider less clunky auth method * *Go* dependency-less? <-- this is a terrible idea \ No newline at end of file diff --git a/auth.go b/auth.go index 4104243..85c7e7d 100644 --- a/auth.go +++ b/auth.go @@ -43,7 +43,7 @@ func NoteLoginFail(username string, password string, r *http.Request) { // BasicAuth is a middleware that handles authentication & authorization for the app. // It uses BasicAuth because I doubt there is a need for something sophisticated in a small hobby project -// Originally taken from Alex Edwards's https://www.alexedwards.net/blog/basic-authentication-in-go, MIT Licensed. (13.03.2024) +// Originally taken from https://www.alexedwards.net/blog/basic-authentication-in-go (13.03.2024) func BasicAuth(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { username, password, ok := r.BasicAuth() @@ -81,7 +81,7 @@ func Scram() { // NotifyTelegram attempts to send a message to admin through telegram func NotifyTelegram(msg string) { if Cfg.TelegramChat == "" || Cfg.TelegramToken == "" { - slog.Debug("ignoring telegram request due to lack of credentials") + slog.Warn("ignoring telegram request due to lack of credentials") return } client := &http.Client{} diff --git a/config.go b/config.go index 015c077..e1ba946 100644 --- a/config.go +++ b/config.go @@ -5,7 +5,6 @@ import ( "errors" "fmt" "log" - "log/slog" "os" "reflect" "strconv" @@ -22,7 +21,6 @@ type Config struct { Timezone *time.Location `config:"timezone" type:"location"` Language string `config:"language" type:"string"` LogToFile bool `config:"log_to_file" type:"bool"` - LogFile string `config:"log_file" type:"string"` Scram bool `config:"enable_scram" type:"bool"` TelegramToken string `config:"tg_token" type:"string"` @@ -116,22 +114,13 @@ func (c *Config) Reload() error { } else { c.Timezone = loc } - slog.Debug("reloaded config", "config", c) return LoadLanguage(c.Language) // Load selected language } // ConfigInit loads config on startup -// Some defaults are declared here func ConfigInit() Config { - cfg := Config{ - Port: 7101, - Username: "admin", - Password: "admin", - Timezone: time.Local, - Language: "en", - LogFile: "config/log.txt", - } + cfg := Config{Port: 7101, Username: "admin", Password: "admin", Timezone: time.Local, Language: "en"} // Some defaults are declared here err := cfg.Reload() if err != nil { log.Fatal(err) diff --git a/config/config.txt b/config/config.txt index d0a665e..f9398f4 100644 --- a/config/config.txt +++ b/config/config.txt @@ -4,5 +4,4 @@ port=7101 timezone=Local language=en log_to_file=false -log_file=config/log.txt enable_scram=false diff --git a/flags.go b/flags.go index 4d56b51..043dbdf 100644 --- a/flags.go +++ b/flags.go @@ -11,7 +11,6 @@ func FlagInit() { username := flag.String("user", "", "override username") password := flag.String("pass", "", "override password") port := flag.Int("port", 0, "override port") - debug := flag.Bool("debug", false, "debug logging") flag.Parse() if *config != "" { @@ -30,5 +29,4 @@ func FlagInit() { if *port != 0 { Cfg.Port = *port } - DebugMode = *debug } diff --git a/i18n.go b/i18n.go index 2088b55..03d4f12 100644 --- a/i18n.go +++ b/i18n.go @@ -9,7 +9,6 @@ import ( var Translations = map[string]string{} -// LoadLanguage loads a json file for selected language into the Translations map func LoadLanguage(language string) error { filename := "i18n/" + language + ".json" @@ -29,7 +28,6 @@ func LoadLanguage(language string) error { return err } -// TranslatableText attempts to match an id to a string in current language func TranslatableText(id string) string { if v, ok := Translations[id]; !ok { return id diff --git a/logger.go b/logger.go index 2c90028..16576c6 100644 --- a/logger.go +++ b/logger.go @@ -8,15 +8,15 @@ import ( "os" ) -var DebugMode = false +var LogFile = "config/log.txt" -// LogInit makes slog output to both stdout and a file if needed, and enables debug mode if selected +// LogInit makes slog output to both stdout and a file if needed func LogInit() { var w io.Writer if Cfg.LogToFile { - f, err := os.OpenFile(Cfg.LogFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) + f, err := os.OpenFile(LogFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) if err != nil { - slog.Error("error opening log file, logging to stdout", "path", Cfg.LogFile, "error", err) + slog.Error("error opening log file, logging to stdout", "path", LogFile, "error", err) return } // No defer f.Close() because that breaks the MultiWriter @@ -26,10 +26,6 @@ func LogInit() { } // Make slog and chi use intended format - var opts *slog.HandlerOptions - if DebugMode { - opts = &slog.HandlerOptions{Level: slog.LevelDebug} - } - slog.SetDefault(slog.New(slog.NewTextHandler(w, opts))) + slog.SetDefault(slog.New(slog.NewTextHandler(w, nil))) middleware.DefaultLogger = middleware.RequestLogger(&middleware.DefaultLogFormatter{Logger: log.Default(), NoColor: true}) } diff --git a/main.go b/main.go index 9b4926e..e306884 100644 --- a/main.go +++ b/main.go @@ -3,7 +3,7 @@ package main var Cfg = ConfigInit() func main() { - FlagInit() LogInit() + FlagInit() Serve() } diff --git a/serve.go b/serve.go index d3f21a7..645edd4 100644 --- a/serve.go +++ b/serve.go @@ -44,6 +44,5 @@ func Serve() { r.Handle("/public/*", http.StripPrefix("/public/", fs)) slog.Info("🌺 Website working", "port", Cfg.Port) - slog.Debug("Debug mode enabled") log.Fatal(http.ListenAndServe(":"+strconv.Itoa(Cfg.Port), r)) }