From f1fe01f72524d00609cb14b212e2e4ac263ac98e Mon Sep 17 00:00:00 2001 From: rxdn <29165304+rxdn@users.noreply.github.com> Date: Fri, 3 Sep 2021 13:46:04 +0100 Subject: [PATCH] Better logging --- app/http/middleware/logging.go | 9 ++- app/http/middleware/ratelimit.go | 2 +- app/http/server.go | 101 ++++++++++++++++--------------- 3 files changed, 59 insertions(+), 53 deletions(-) diff --git a/app/http/middleware/logging.go b/app/http/middleware/logging.go index 4164889..55c13aa 100644 --- a/app/http/middleware/logging.go +++ b/app/http/middleware/logging.go @@ -2,6 +2,7 @@ package middleware import ( "fmt" + "github.com/TicketsBot/GoPanel/config" "github.com/getsentry/sentry-go" "github.com/gin-gonic/gin" "io/ioutil" @@ -9,10 +10,14 @@ import ( ) func Logging(ctx *gin.Context) { - defer ctx.Next() + ctx.Next() statusCode := ctx.Writer.Status() + if !config.Conf.Debug && statusCode >= 200 && statusCode <= 299 { + return + } + level := sentry.LevelInfo if statusCode >= 500 { level = sentry.LevelError @@ -26,7 +31,7 @@ func Logging(ctx *gin.Context) { "method": ctx.Request.Method, "path": ctx.Request.URL.Path, "guild_id": ctx.Keys["guildid"], - "user_id": ctx.Keys["user_id"], + "user_id": ctx.Keys["userid"], "body": string(body), }, Level: level, diff --git a/app/http/middleware/ratelimit.go b/app/http/middleware/ratelimit.go index 1703a22..52d094f 100644 --- a/app/http/middleware/ratelimit.go +++ b/app/http/middleware/ratelimit.go @@ -69,7 +69,7 @@ func CreateRateLimiter(rlType RateLimitType, max int, period time.Duration) gin. func writeHeaders(ctx *gin.Context, res *redis_rate.Result) { ctx.Keys["rl_sr"] = res.Remaining - fmt.Println(res.Remaining) + ctx.Header("X-RateLimit-Limit", strconv.Itoa(res.Limit.Rate)) ctx.Header("X-RateLimit-Remaining", strconv.Itoa(res.Remaining)) ctx.Header("X-RateLimit-Reset-After", strconv.FormatInt(res.ResetAfter.Milliseconds(), 10)) diff --git a/app/http/server.go b/app/http/server.go index 86f9cc3..98f193b 100644 --- a/app/http/server.go +++ b/app/http/server.go @@ -41,6 +41,7 @@ func StartServer() { router.Use(gin.Recovery()) router.Use(middleware.MultiReadBody) + router.Use(middleware.Logging) router.Use(sentrygin.New(sentrygin.Options{})) // Defaults are ok router.Use(rl(middleware.RateLimitTypeIp, 60, time.Minute)) @@ -49,24 +50,24 @@ func StartServer() { router.Use(middleware.Cors(config.Conf)) - router.GET("/webchat", root.WebChatWs, middleware.Logging) + router.GET("/webchat", root.WebChatWs) - router.POST("/callback", middleware.VerifyXTicketsHeader, root.CallbackHandler, middleware.Logging) - router.POST("/logout", middleware.VerifyXTicketsHeader, middleware.AuthenticateToken, root.LogoutHandler, middleware.Logging) + router.POST("/callback", middleware.VerifyXTicketsHeader, root.CallbackHandler) + router.POST("/logout", middleware.VerifyXTicketsHeader, middleware.AuthenticateToken, root.LogoutHandler) apiGroup := router.Group("/api", middleware.VerifyXTicketsHeader, middleware.AuthenticateToken) { - apiGroup.GET("/session", api.SessionHandler, middleware.Logging) + apiGroup.GET("/session", api.SessionHandler) } guildAuthApiAdmin := apiGroup.Group("/:id", middleware.AuthenticateGuild(true, permission.Admin)) guildAuthApiSupport := apiGroup.Group("/:id", middleware.AuthenticateGuild(true, permission.Support)) guildApiNoAuth := apiGroup.Group("/:id", middleware.ParseGuildId) { - guildAuthApiSupport.GET("/channels", api.ChannelsHandler, middleware.Logging) - guildAuthApiSupport.GET("/premium", api.PremiumHandler, middleware.Logging) - guildAuthApiSupport.GET("/user/:user", api.UserHandler, middleware.Logging) - guildAuthApiSupport.GET("/roles", api.RolesHandler, middleware.Logging) + guildAuthApiSupport.GET("/channels", api.ChannelsHandler) + guildAuthApiSupport.GET("/premium", api.PremiumHandler) + guildAuthApiSupport.GET("/user/:user", api.UserHandler) + guildAuthApiSupport.GET("/roles", api.RolesHandler) guildAuthApiSupport.GET("/members/search", rl(middleware.RateLimitTypeGuild, 5, time.Second), rl(middleware.RateLimitTypeGuild, 10, time.Second*30), @@ -75,22 +76,22 @@ func StartServer() { middleware.Logging, ) - guildAuthApiAdmin.GET("/settings", api_settings.GetSettingsHandler, middleware.Logging) - guildAuthApiAdmin.POST("/settings", api_settings.UpdateSettingsHandler, middleware.Logging) + guildAuthApiAdmin.GET("/settings", api_settings.GetSettingsHandler) + guildAuthApiAdmin.POST("/settings", api_settings.UpdateSettingsHandler) - guildAuthApiSupport.GET("/blacklist", api_blacklist.GetBlacklistHandler, middleware.Logging) - guildAuthApiSupport.POST("/blacklist/:user", api_blacklist.AddBlacklistHandler, middleware.Logging) - guildAuthApiSupport.DELETE("/blacklist/:user", api_blacklist.RemoveBlacklistHandler, middleware.Logging) + guildAuthApiSupport.GET("/blacklist", api_blacklist.GetBlacklistHandler) + guildAuthApiSupport.POST("/blacklist/:user", api_blacklist.AddBlacklistHandler) + guildAuthApiSupport.DELETE("/blacklist/:user", api_blacklist.RemoveBlacklistHandler) - guildAuthApiAdmin.GET("/panels", api_panels.ListPanels, middleware.Logging) - guildAuthApiAdmin.POST("/panels", api_panels.CreatePanel, middleware.Logging) - guildAuthApiAdmin.PATCH("/panels/:panelid", api_panels.UpdatePanel, middleware.Logging) - guildAuthApiAdmin.DELETE("/panels/:panelid", api_panels.DeletePanel, middleware.Logging) + guildAuthApiAdmin.GET("/panels", api_panels.ListPanels) + guildAuthApiAdmin.POST("/panels", api_panels.CreatePanel) + guildAuthApiAdmin.PATCH("/panels/:panelid", api_panels.UpdatePanel) + guildAuthApiAdmin.DELETE("/panels/:panelid", api_panels.DeletePanel) - guildAuthApiAdmin.GET("/multipanels", api_panels.MultiPanelList, middleware.Logging) - guildAuthApiAdmin.POST("/multipanels", api_panels.MultiPanelCreate, middleware.Logging) - guildAuthApiAdmin.PATCH("/multipanels/:panelid", api_panels.MultiPanelUpdate, middleware.Logging) - guildAuthApiAdmin.DELETE("/multipanels/:panelid", api_panels.MultiPanelDelete, middleware.Logging) + guildAuthApiAdmin.GET("/multipanels", api_panels.MultiPanelList) + guildAuthApiAdmin.POST("/multipanels", api_panels.MultiPanelCreate) + guildAuthApiAdmin.PATCH("/multipanels/:panelid", api_panels.MultiPanelUpdate) + guildAuthApiAdmin.DELETE("/multipanels/:panelid", api_panels.MultiPanelDelete) // Should be a GET, but easier to take a body for development purposes guildAuthApiSupport.POST("/transcripts", @@ -101,49 +102,49 @@ func StartServer() { ) // Allow regular users to get their own transcripts, make sure you check perms inside - guildApiNoAuth.GET("/transcripts/:ticketId", rl(middleware.RateLimitTypeGuild, 10, 10*time.Second), api_transcripts.GetTranscriptHandler, middleware.Logging) + guildApiNoAuth.GET("/transcripts/:ticketId", rl(middleware.RateLimitTypeGuild, 10, 10*time.Second), api_transcripts.GetTranscriptHandler) - guildAuthApiSupport.GET("/tickets", api_ticket.GetTickets, middleware.Logging) - guildAuthApiSupport.GET("/tickets/:ticketId", api_ticket.GetTicket, middleware.Logging) - guildAuthApiSupport.POST("/tickets/:ticketId", rl(middleware.RateLimitTypeGuild, 5, time.Second*5), api_ticket.SendMessage, middleware.Logging) - guildAuthApiSupport.DELETE("/tickets/:ticketId", api_ticket.CloseTicket, middleware.Logging) + guildAuthApiSupport.GET("/tickets", api_ticket.GetTickets) + guildAuthApiSupport.GET("/tickets/:ticketId", api_ticket.GetTicket) + guildAuthApiSupport.POST("/tickets/:ticketId", rl(middleware.RateLimitTypeGuild, 5, time.Second*5), api_ticket.SendMessage) + guildAuthApiSupport.DELETE("/tickets/:ticketId", api_ticket.CloseTicket) - guildAuthApiSupport.GET("/tags", api_tags.TagsListHandler, middleware.Logging) - guildAuthApiSupport.PUT("/tags", api_tags.CreateTag, middleware.Logging) - guildAuthApiSupport.DELETE("/tags", api_tags.DeleteTag, middleware.Logging) + guildAuthApiSupport.GET("/tags", api_tags.TagsListHandler) + guildAuthApiSupport.PUT("/tags", api_tags.CreateTag) + guildAuthApiSupport.DELETE("/tags", api_tags.DeleteTag) - guildAuthApiAdmin.GET("/claimsettings", api_settings.GetClaimSettings, middleware.Logging) - guildAuthApiAdmin.POST("/claimsettings", api_settings.PostClaimSettings, middleware.Logging) + guildAuthApiAdmin.GET("/claimsettings", api_settings.GetClaimSettings) + guildAuthApiAdmin.POST("/claimsettings", api_settings.PostClaimSettings) - guildAuthApiAdmin.GET("/autoclose", api_autoclose.GetAutoClose, middleware.Logging) - guildAuthApiAdmin.POST("/autoclose", api_autoclose.PostAutoClose, middleware.Logging) + guildAuthApiAdmin.GET("/autoclose", api_autoclose.GetAutoClose) + guildAuthApiAdmin.POST("/autoclose", api_autoclose.PostAutoClose) - guildAuthApiAdmin.GET("/team", api_team.GetTeams, middleware.Logging) - guildAuthApiAdmin.GET("/team/:teamid", rl(middleware.RateLimitTypeUser ,10, time.Second*30), api_team.GetMembers, middleware.Logging) - guildAuthApiAdmin.POST("/team", rl(middleware.RateLimitTypeUser, 10, time.Minute), api_team.CreateTeam, middleware.Logging) - guildAuthApiAdmin.PUT("/team/:teamid/:snowflake", rl(middleware.RateLimitTypeGuild, 5, time.Second*10), api_team.AddMember, middleware.Logging) - guildAuthApiAdmin.DELETE("/team/:teamid", api_team.DeleteTeam, middleware.Logging) - guildAuthApiAdmin.DELETE("/team/:teamid/:snowflake", rl(middleware.RateLimitTypeGuild, 30, time.Minute), api_team.RemoveMember, middleware.Logging) + guildAuthApiAdmin.GET("/team", api_team.GetTeams) + guildAuthApiAdmin.GET("/team/:teamid", rl(middleware.RateLimitTypeUser ,10, time.Second*30), api_team.GetMembers) + guildAuthApiAdmin.POST("/team", rl(middleware.RateLimitTypeUser, 10, time.Minute), api_team.CreateTeam) + guildAuthApiAdmin.PUT("/team/:teamid/:snowflake", rl(middleware.RateLimitTypeGuild, 5, time.Second*10), api_team.AddMember) + guildAuthApiAdmin.DELETE("/team/:teamid", api_team.DeleteTeam) + guildAuthApiAdmin.DELETE("/team/:teamid/:snowflake", rl(middleware.RateLimitTypeGuild, 30, time.Minute), api_team.RemoveMember) } userGroup := router.Group("/user", middleware.AuthenticateToken) { - userGroup.GET("/guilds", api.GetGuilds, middleware.Logging) - userGroup.POST("/guilds/reload", api.ReloadGuildsHandler, middleware.Logging) - userGroup.GET("/permissionlevel", api.GetPermissionLevel, middleware.Logging) + userGroup.GET("/guilds", api.GetGuilds) + userGroup.POST("/guilds/reload", api.ReloadGuildsHandler) + userGroup.GET("/permissionlevel", api.GetPermissionLevel) { whitelabelGroup := userGroup.Group("/whitelabel", middleware.VerifyWhitelabel(true)) - whitelabelGroup.GET("/", api_whitelabel.WhitelabelGet, middleware.Logging) - whitelabelGroup.GET("/errors", api_whitelabel.WhitelabelGetErrors, middleware.Logging) - whitelabelGroup.GET("/guilds", api_whitelabel.WhitelabelGetGuilds, middleware.Logging) - whitelabelGroup.GET("/public-key", api_whitelabel.WhitelabelGetPublicKey, middleware.Logging) - whitelabelGroup.POST("/public-key", api_whitelabel.WhitelabelPostPublicKey, middleware.Logging) - whitelabelGroup.POST("/create-interactions", api_whitelabel.GetWhitelabelCreateInteractions(), middleware.Logging) + whitelabelGroup.GET("/", api_whitelabel.WhitelabelGet) + whitelabelGroup.GET("/errors", api_whitelabel.WhitelabelGetErrors) + whitelabelGroup.GET("/guilds", api_whitelabel.WhitelabelGetGuilds) + whitelabelGroup.GET("/public-key", api_whitelabel.WhitelabelGetPublicKey) + whitelabelGroup.POST("/public-key", api_whitelabel.WhitelabelPostPublicKey) + whitelabelGroup.POST("/create-interactions", api_whitelabel.GetWhitelabelCreateInteractions()) - whitelabelGroup.POST("/", rl(middleware.RateLimitTypeUser, 10, time.Minute), api_whitelabel.WhitelabelPost, middleware.Logging) - whitelabelGroup.POST("/status", rl(middleware.RateLimitTypeUser, 1, time.Second*5), api_whitelabel.WhitelabelStatusPost, middleware.Logging) + whitelabelGroup.POST("/", rl(middleware.RateLimitTypeUser, 10, time.Minute), api_whitelabel.WhitelabelPost) + whitelabelGroup.POST("/status", rl(middleware.RateLimitTypeUser, 1, time.Second*5), api_whitelabel.WhitelabelStatusPost) } }