From d767921e0e04739b0cd2d1f9f501bb034349edd4 Mon Sep 17 00:00:00 2001 From: mstar Date: Fri, 11 Apr 2025 11:12:04 +0200 Subject: [PATCH] Addr flag for debug server, logging --- go.mod | 2 +- go.sum | 2 ++ main.go | 2 +- shared/flags.go | 5 +++++ web/debug/posts.go | 4 +++- web/debug/server.go | 13 ++++++++----- web/debug/users.go | 25 +++++++++++++++++++++++-- web/public/api/webfinger.go | 4 +++- web/public/errorpages.go | 1 + web/public/server.go | 7 +++++-- web/shared/User.go | 2 ++ 11 files changed, 54 insertions(+), 13 deletions(-) diff --git a/go.mod b/go.mod index be15928..2949a3c 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.23.0 toolchain go1.23.7 require ( - git.mstar.dev/mstar/goutils v1.12.1 + git.mstar.dev/mstar/goutils v1.12.2 github.com/BurntSushi/toml v1.4.0 github.com/dgraph-io/ristretto v0.2.0 github.com/eko/gocache/lib/v4 v4.1.6 diff --git a/go.sum b/go.sum index c40e5d8..7167398 100644 --- a/go.sum +++ b/go.sum @@ -61,6 +61,8 @@ git.mstar.dev/mstar/goutils v1.12.0 h1:d88hLS8KnLUCI+8aWBR6228M43hxHdJpj8WuSqm4L git.mstar.dev/mstar/goutils v1.12.0/go.mod h1:juxY0eZEMnA95fedRp2LVXvUBgEjz66nE8SEdGKcxMA= git.mstar.dev/mstar/goutils v1.12.1 h1:HZKKzMNfx7JKSUi5s8SwwUFEqEX6xvkM6NMf+Pht+lo= git.mstar.dev/mstar/goutils v1.12.1/go.mod h1:juxY0eZEMnA95fedRp2LVXvUBgEjz66nE8SEdGKcxMA= +git.mstar.dev/mstar/goutils v1.12.2 h1:twCnsl+WRgP52mV5D5FRVJK6Yst1/3VtulHd77U++BY= +git.mstar.dev/mstar/goutils v1.12.2/go.mod h1:juxY0eZEMnA95fedRp2LVXvUBgEjz66nE8SEdGKcxMA= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= diff --git a/main.go b/main.go index 1b193ee..8d2da46 100644 --- a/main.go +++ b/main.go @@ -154,7 +154,7 @@ func newServer() { if *shared.FlagStartDebugServer { go func() { log.Info().Msg("Starting debug server") - if err = webdebug.New().Start(); err != nil { + if err = webdebug.New(*shared.FlagDebugPort).Start(); err != nil { log.Fatal().Err(err).Msg("Debug server failed") } }() diff --git a/shared/flags.go b/shared/flags.go index 03fe2ff..ffb86f1 100644 --- a/shared/flags.go +++ b/shared/flags.go @@ -25,6 +25,11 @@ var ( false, "Also start the local debugging server", ) + FlagDebugPort *string = flag.String( + "debugport", + "127.0.0.1:3305", + "Set the address the debug server will listen on. Format: IP:Port", + ) FlagLogFile *string = flag.String( "logfile", "/var/log/linstrom/logs", diff --git a/web/debug/posts.go b/web/debug/posts.go index 4afa51e..6e6470e 100644 --- a/web/debug/posts.go +++ b/web/debug/posts.go @@ -8,7 +8,7 @@ import ( webutils "git.mstar.dev/mstar/goutils/http" "git.mstar.dev/mstar/goutils/sliceutils" - "github.com/rs/zerolog/log" + "github.com/rs/zerolog/hlog" "gorm.io/gorm" "git.mstar.dev/mstar/linstrom/storage-new" @@ -22,6 +22,7 @@ func postAs(w http.ResponseWriter, r *http.Request) { Username string `json:"username"` Content string `json:"content"` } + log := hlog.FromRequest(r) dec := json.NewDecoder(r.Body) data := Inbound{} err := dec.Decode(&data) @@ -76,6 +77,7 @@ func postAs(w http.ResponseWriter, r *http.Request) { } func notesFrom(w http.ResponseWriter, r *http.Request) { + log := hlog.FromRequest(r) username := r.FormValue("username") user, err := dbgen.User.GetByUsername(username) if err != nil { diff --git a/web/debug/server.go b/web/debug/server.go index e0afc95..0724350 100644 --- a/web/debug/server.go +++ b/web/debug/server.go @@ -12,15 +12,15 @@ package webdebug import ( "context" "net/http" -) -const DebugAddr = "127.0.0.1:3305" + webutils "git.mstar.dev/mstar/goutils/http" +) type Server struct { server *http.Server } -func New() *Server { +func New(addr string) *Server { handler := http.NewServeMux() handler.HandleFunc("GET /non-deleted", getNonDeletedUsers) handler.HandleFunc("POST /local-user", createLocalUser) @@ -28,8 +28,11 @@ func New() *Server { handler.HandleFunc("POST /post-as", postAs) handler.HandleFunc("GET /notes-for", notesFrom) web := http.Server{ - Addr: DebugAddr, - Handler: handler, + Addr: addr, + Handler: webutils.ChainMiddlewares( + handler, + webutils.BuildLoggingMiddleware(map[string]string{"server": "debug"}), + ), } return &Server{&web} } diff --git a/web/debug/users.go b/web/debug/users.go index 3195537..87f656b 100644 --- a/web/debug/users.go +++ b/web/debug/users.go @@ -11,7 +11,7 @@ import ( webutils "git.mstar.dev/mstar/goutils/http" "git.mstar.dev/mstar/goutils/other" "git.mstar.dev/mstar/goutils/sliceutils" - "github.com/rs/zerolog/log" + "github.com/rs/zerolog/hlog" "git.mstar.dev/mstar/linstrom/shared" "git.mstar.dev/mstar/linstrom/storage-new/dbgen" @@ -20,18 +20,38 @@ import ( ) func getNonDeletedUsers(w http.ResponseWriter, r *http.Request) { + log := hlog.FromRequest(r) pageStr := r.FormValue("page") page := 0 if pageStr != "" { var err error page, err = strconv.Atoi(pageStr) if err != nil { - webutils.HttpErr(w, 0, "page is not a number", http.StatusBadRequest) + webutils.ProblemDetails( + w, + http.StatusBadRequest, + "/errors/bad-page", + "bad page number", + other.IntoPointer("page number must be an uint"), + nil, + ) + return + } + if page < 0 { + webutils.ProblemDetails( + w, + http.StatusBadRequest, + "/errors/bad-page", + "bad page number", + other.IntoPointer("page number must be >= 0"), + nil, + ) return } } users, err := dbgen.User.GetPagedAllNonDeleted(uint(page)) if err != nil { + log.Error().Err(err).Int("page", page).Msg("Failed to get non-deleted users") webutils.ProblemDetails( w, http.StatusInternalServerError, @@ -58,6 +78,7 @@ func createLocalUser(w http.ResponseWriter, r *http.Request) { Location *string `json:"location"` IsBot bool `json:"is_bot"` } + log := hlog.FromRequest(r) jsonDecoder := json.NewDecoder(r.Body) data := Inbound{} err := jsonDecoder.Decode(&data) diff --git a/web/public/api/webfinger.go b/web/public/api/webfinger.go index fb48f91..3e8e1ac 100644 --- a/web/public/api/webfinger.go +++ b/web/public/api/webfinger.go @@ -8,7 +8,7 @@ import ( webutils "git.mstar.dev/mstar/goutils/http" "git.mstar.dev/mstar/goutils/other" - "github.com/rs/zerolog/log" + "github.com/rs/zerolog/hlog" "gorm.io/gorm" "git.mstar.dev/mstar/linstrom/config" @@ -30,6 +30,7 @@ func WellKnownWebfinger(w http.ResponseWriter, r *http.Request) { Links []OutboundLink `json:"links"` Aliases []string `json:"aliases,omitempty"` } + log := hlog.FromRequest(r) requestedResource := r.FormValue("resource") matches := webfingerResourceRegex.FindStringSubmatch(requestedResource) if len(matches) == 0 { @@ -104,6 +105,7 @@ func WellKnownWebfinger(w http.ResponseWriter, r *http.Request) { func Nodeinfo(w http.ResponseWriter, r *http.Request) { u := dbgen.User + log := hlog.FromRequest(r) userCount, err := u.Where(u.DeletedAt.IsNull(), u.Verified.Is(true)).Count() if err != nil { webutils.ProblemDetails(w, 500, "/errors/db-failure", "internal database failure", nil, nil) diff --git a/web/public/errorpages.go b/web/public/errorpages.go index 5743ad1..2363848 100644 --- a/web/public/errorpages.go +++ b/web/public/errorpages.go @@ -11,6 +11,7 @@ var errorDescriptions = map[string]string{ "webfinger-bad-resource": "The given format for the \"resource\" url parameter was missing or invalid. It must follow the form \"acct:@\"", "db-failure": "The database query for this request failed for an undisclosed reason. This is often caused by bad input data conflicting with existing information. Try to submit different data or wait for some time", "bad-request-data": "The data provided in the request doesn't match the requirements, see problem details' detail field for more information", + "bad-page": "The provided page number was not valid. See response details for more information", } func errorTypeHandler(w http.ResponseWriter, r *http.Request) { diff --git a/web/public/server.go b/web/public/server.go index 2fa9237..61e55cf 100644 --- a/web/public/server.go +++ b/web/public/server.go @@ -57,8 +57,11 @@ func New(addr string, duckImg *string) *Server { fmt.Fprint(w, *duckImg) }) server := http.Server{ - Handler: webutils.ChainMiddlewares(handler, webutils.LoggingMiddleware), - Addr: addr, + Handler: webutils.ChainMiddlewares( + handler, + webutils.BuildLoggingMiddleware(map[string]string{"server": "public"}), + ), + Addr: addr, } return &Server{&server} } diff --git a/web/shared/User.go b/web/shared/User.go index 1858a17..ab097c2 100644 --- a/web/shared/User.go +++ b/web/shared/User.go @@ -19,6 +19,7 @@ type User struct { CreatedAt time.Time `json:"created_at"` ServerId uint `json:"server_id"` Displayname string `json:"displayname"` + Username string `json:"username"` Description string `json:"description"` IsBot bool `json:"is_bot"` IconId *string `json:"icon_id"` @@ -88,6 +89,7 @@ func (u *User) FromModel(m *models.User) { u.ServerId = m.ServerId u.Displayname = m.DisplayName u.IsBot = m.IsBot + u.Username = m.Username if m.IconId.Valid { u.IconId = &m.IconId.String }