From 06c036817d14f1085e6b2d3be9eaf78901144080 Mon Sep 17 00:00:00 2001 From: MrMelon54 Date: Mon, 13 May 2024 20:06:17 +0100 Subject: [PATCH] Transition to new logger --- cmd/tulip/serve.go | 30 +++++++++++++++--------------- database/clientstore-wrapper.go | 2 ++ go.mod | 2 +- go.sum | 1 + logger/logger.go | 12 ++++++++++++ mail/templates/templates.go | 6 +++--- pages/pages.go | 4 ++-- server/db.go | 4 ++-- server/login.go | 4 ++-- server/manage-users.go | 4 ++-- server/server.go | 7 ++----- 11 files changed, 44 insertions(+), 32 deletions(-) create mode 100644 logger/logger.go diff --git a/cmd/tulip/serve.go b/cmd/tulip/serve.go index 9ca2abe..252f048 100644 --- a/cmd/tulip/serve.go +++ b/cmd/tulip/serve.go @@ -10,6 +10,7 @@ import ( "github.com/1f349/tulip" "github.com/1f349/tulip/database" "github.com/1f349/tulip/database/types" + "github.com/1f349/tulip/logger" "github.com/1f349/tulip/mail/templates" "github.com/1f349/tulip/pages" "github.com/1f349/tulip/server" @@ -17,7 +18,6 @@ import ( "github.com/google/subcommands" _ "github.com/mattn/go-sqlite3" "github.com/mrmelon54/exit-reload" - "log" "os" "path/filepath" "time" @@ -40,19 +40,19 @@ func (s *serveCmd) Usage() string { } func (s *serveCmd) Execute(_ context.Context, _ *flag.FlagSet, _ ...any) subcommands.ExitStatus { - log.Println("[Tulip] Starting...") + logger.Logger.Info("Starting...") if s.configPath == "" { - log.Println("[Tulip] Error: config flag is missing") + logger.Logger.Error("Config flag is missing") return subcommands.ExitUsageError } openConf, err := os.Open(s.configPath) if err != nil { if os.IsNotExist(err) { - log.Println("[Tulip] Error: missing config file") + logger.Logger.Error("Missing config file") } else { - log.Println("[Tulip] Error: open config file: ", err) + logger.Logger.Error("Open config file: ", err) } return subcommands.ExitFailure } @@ -60,13 +60,13 @@ func (s *serveCmd) Execute(_ context.Context, _ *flag.FlagSet, _ ...any) subcomm var config server.Conf err = json.NewDecoder(openConf).Decode(&config) if err != nil { - log.Println("[Tulip] Error: invalid config file: ", err) + logger.Logger.Error("Invalid config file: ", err) return subcommands.ExitFailure } configPathAbs, err := filepath.Abs(s.configPath) if err != nil { - log.Fatal("[Tulip] Failed to get absolute config path") + logger.Logger.Fatal("Failed to get absolute config path") } wd := filepath.Dir(configPathAbs) normalLoad(config, wd) @@ -76,29 +76,29 @@ func (s *serveCmd) Execute(_ context.Context, _ *flag.FlagSet, _ ...any) subcomm func normalLoad(startUp server.Conf, wd string) { signingKey, err := mjwt.NewMJwtSignerFromFileOrCreate(startUp.OtpIssuer, filepath.Join(wd, "tulip.key.pem"), rand.Reader, 4096) if err != nil { - log.Fatal("[Tulip] Failed to open signing key file:", err) + logger.Logger.Fatal("Failed to open signing key file:", err) } db, err := tulip.InitDB(filepath.Join(wd, "tulip.db.sqlite")) if err != nil { - log.Fatal("[Tulip] Failed to open database:", err) + logger.Logger.Fatal("Failed to open database:", err) } - log.Println("[Tulip] Checking database contains at least one user") + logger.Logger.Info("Checking database contains at least one user") if err := checkDbHasUser(db); err != nil { - log.Fatal("[Tulip] Failed check:", err) + logger.Logger.Fatal("Failed check:", err) } if err = pages.LoadPages(wd); err != nil { - log.Fatal("[Tulip] Failed to load page templates:", err) + logger.Logger.Fatal("Failed to load page templates:", err) } if err := templates.LoadMailTemplates(wd); err != nil { - log.Fatal("[Tulip] Failed to load mail templates:", err) + logger.Logger.Fatal("Failed to load mail templates:", err) } srv := server.NewHttpServer(startUp, db, signingKey) - log.Printf("[Tulip] Starting HTTP server on '%s'\n", srv.Addr) - go utils.RunBackgroundHttp("HTTP", srv) + logger.Logger.Info("Starting server", "addr", srv.Addr) + go utils.RunBackgroundHttp(logger.Logger, srv) exit_reload.ExitReload("Tulip", func() {}, func() { // stop http server diff --git a/database/clientstore-wrapper.go b/database/clientstore-wrapper.go index 2534f20..6a4a692 100644 --- a/database/clientstore-wrapper.go +++ b/database/clientstore-wrapper.go @@ -3,6 +3,8 @@ package database import ( "fmt" "github.com/1f349/tulip/database/types" + "github.com/go-oauth2/oauth2/v4" + "github.com/hardfinhq/go-date" "github.com/mrmelon54/pronouns" "golang.org/x/text/language" "net/url" diff --git a/go.mod b/go.mod index 6bac2a0..277c5e0 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/1f349/cache v0.0.3 github.com/1f349/mjwt v0.2.5 github.com/1f349/overlapfs v0.0.1 - github.com/1f349/violet v0.0.13 + github.com/1f349/violet v0.0.14 github.com/charmbracelet/log v0.4.0 github.com/emersion/go-message v0.18.1 github.com/emersion/go-sasl v0.0.0-20231106173351-e73c9f7bad43 diff --git a/go.sum b/go.sum index f1d1838..fadfa17 100644 --- a/go.sum +++ b/go.sum @@ -7,6 +7,7 @@ github.com/1f349/overlapfs v0.0.1 h1:LAxBolrXFAgU0yqZtXg/C/aaPq3eoQSPpBc49BHuTp0 github.com/1f349/overlapfs v0.0.1/go.mod h1:I6aItQycr7nrzplmfNXp/QF9tTmKRSgY3fXmu/7Ky2o= github.com/1f349/violet v0.0.13 h1:lJpTz15Ea83Uc1VAISXTjtKuzr8Pe8NM4cMGp3Aiyhk= github.com/1f349/violet v0.0.13/go.mod h1:Ga5/hWqI+EkR6J1mAMNzs7aJhuGcA89XFqgQaDXC7Jo= +github.com/1f349/violet v0.0.14/go.mod h1:iAREhm+wxnGXkmuvmBhOuhUx2T7/5w7stLYNgQGbqC8= github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= diff --git a/logger/logger.go b/logger/logger.go new file mode 100644 index 0000000..f0e13dc --- /dev/null +++ b/logger/logger.go @@ -0,0 +1,12 @@ +package logger + +import ( + "github.com/charmbracelet/log" + "os" +) + +var Logger = log.NewWithOptions(os.Stderr, log.Options{ + ReportCaller: true, + ReportTimestamp: true, + Prefix: "Tulip", +}) diff --git a/mail/templates/templates.go b/mail/templates/templates.go index da418a9..ed82df3 100644 --- a/mail/templates/templates.go +++ b/mail/templates/templates.go @@ -4,10 +4,10 @@ import ( "embed" "errors" "github.com/1f349/overlapfs" + "github.com/1f349/tulip/logger" htmlTemplate "html/template" "io" "io/fs" - "log" "os" "path/filepath" "sync" @@ -46,10 +46,10 @@ func LoadMailTemplates(wd string) (err error) { func RenderMailTemplate(wrHtml, wrTxt io.Writer, name string, data any) { err := mailHtmlTemplates.ExecuteTemplate(wrHtml, name+".go.html", data) if err != nil { - log.Printf("Failed to render mail html: %s: %s\n", name, err) + logger.Logger.Warn("Failed to render mail html", "name", name, "err", err) } err = mailTextTemplates.ExecuteTemplate(wrTxt, name+".go.txt", data) if err != nil { - log.Printf("Failed to render mail text: %s: %s\n", name, err) + logger.Logger.Warn("Failed to render mail text", "name", name, "err", err) } } diff --git a/pages/pages.go b/pages/pages.go index 03fbd38..8741533 100644 --- a/pages/pages.go +++ b/pages/pages.go @@ -5,10 +5,10 @@ import ( _ "embed" "errors" "github.com/1f349/overlapfs" + "github.com/1f349/tulip/logger" "html/template" "io" "io/fs" - "log" "os" "path/filepath" "sync" @@ -43,7 +43,7 @@ func LoadPages(wd string) (err error) { func RenderPageTemplate(wr io.Writer, name string, data any) { err := wwwTemplates.ExecuteTemplate(wr, name+".go.html", data) if err != nil { - log.Printf("Failed to render page: %s: %s\n", name, err) + logger.Logger.Warn("Failed to render page", "name", name, "err", err) } } diff --git a/server/db.go b/server/db.go index d6d970f..90a8738 100644 --- a/server/db.go +++ b/server/db.go @@ -2,7 +2,7 @@ package server import ( "github.com/1f349/tulip/database" - "log" + "github.com/1f349/tulip/logger" "net/http" ) @@ -13,7 +13,7 @@ func (h *HttpServer) DbTx(rw http.ResponseWriter, action func(db *database.Queri err := action(h.db) if err != nil { http.Error(rw, "Database error", http.StatusInternalServerError) - log.Println("Database action error:", err) + logger.Logger.Warn("Database action error", "err", err) return true } diff --git a/server/login.go b/server/login.go index f0c361e..7fb5451 100644 --- a/server/login.go +++ b/server/login.go @@ -7,13 +7,13 @@ import ( "github.com/1f349/mjwt/auth" "github.com/1f349/mjwt/claims" "github.com/1f349/tulip/database" + "github.com/1f349/tulip/logger" "github.com/1f349/tulip/pages" "github.com/emersion/go-message/mail" "github.com/golang-jwt/jwt/v4" "github.com/google/uuid" "github.com/julienschmidt/httprouter" "golang.org/x/crypto/bcrypt" - "log" "net/http" "net/url" "time" @@ -107,7 +107,7 @@ func (h *HttpServer) LoginPost(rw http.ResponseWriter, req *http.Request, _ http "VerifyUrl": h.conf.BaseUrl + "/mail/verify/" + u, }) if err != nil { - log.Println("[Tulip] Login: Failed to send verification email:", err) + logger.Logger.Warn("Login: Failed to send verification email", "err", err) http.Error(rw, "500 Internal Server Error: Failed to send verification email", http.StatusInternalServerError) return } diff --git a/server/manage-users.go b/server/manage-users.go index 7717358..cf23745 100644 --- a/server/manage-users.go +++ b/server/manage-users.go @@ -4,11 +4,11 @@ import ( "errors" "github.com/1f349/tulip/database" "github.com/1f349/tulip/database/types" + "github.com/1f349/tulip/logger" "github.com/1f349/tulip/pages" "github.com/emersion/go-message/mail" "github.com/google/uuid" "github.com/julienschmidt/httprouter" - "log" "net/http" "net/url" "strconv" @@ -142,7 +142,7 @@ func (h *HttpServer) ManageUsersPost(rw http.ResponseWriter, req *http.Request, "RegisterUrl": h.conf.BaseUrl + "/mail/password/" + u, }) if err != nil { - log.Println("[Tulip] Login: Failed to send register email:", err) + logger.Logger.Warn("Login: Failed to send register email:", "err", err) http.Error(rw, "500 Internal Server Error: Failed to send register email", http.StatusInternalServerError) return } diff --git a/server/server.go b/server/server.go index 24bd870..689fdff 100644 --- a/server/server.go +++ b/server/server.go @@ -10,6 +10,7 @@ import ( "github.com/1f349/mjwt" clientStore "github.com/1f349/tulip/client-store" "github.com/1f349/tulip/database" + "github.com/1f349/tulip/logger" "github.com/1f349/tulip/openid" scope2 "github.com/1f349/tulip/scope" "github.com/1f349/tulip/theme" @@ -18,7 +19,6 @@ import ( "github.com/go-oauth2/oauth2/v4/server" "github.com/go-oauth2/oauth2/v4/store" "github.com/julienschmidt/httprouter" - "log" "net/http" "net/url" "strings" @@ -64,7 +64,7 @@ func NewHttpServer(conf Conf, db *database.Queries, signingKey mjwt.Signer) *htt openIdConf := openid.GenConfig(conf.BaseUrl, []string{"openid", "name", "username", "profile", "email", "birthdate", "age", "zoneinfo", "locale"}, []string{"sub", "name", "preferred_username", "profile", "picture", "website", "email", "email_verified", "gender", "birthdate", "zoneinfo", "locale", "updated_at"}) openIdBytes, err := json.Marshal(openIdConf) if err != nil { - log.Fatalln("Failed to generate OpenID configuration:", err) + logger.Logger.Fatal("Failed to generate OpenID configuration", "err", err) } oauthManager := manage.NewDefaultManager() @@ -85,9 +85,6 @@ func NewHttpServer(conf Conf, db *database.Queries, signingKey mjwt.Signer) *htt oauthManager.MapAccessGenerate(NewJWTAccessGenerate(hs.signingKey)) oauthManager.MapClientStorage(clientStore.New(db)) - oauthSrv.SetResponseErrorHandler(func(re *errors.Response) { - log.Printf("Response error: %#v\n", re) - }) oauthSrv.SetClientInfoHandler(func(req *http.Request) (clientID, clientSecret string, err error) { cId, cSecret, err := server.ClientBasicHandler(req) if cId == "" && cSecret == "" {