diff --git a/app/http/endpoints/api/panel/paneldelete.go b/app/http/endpoints/api/panel/paneldelete.go index f49d304..dd3d8f3 100644 --- a/app/http/endpoints/api/panel/paneldelete.go +++ b/app/http/endpoints/api/panel/paneldelete.go @@ -1,6 +1,7 @@ package api import ( + "errors" "github.com/TicketsBot/GoPanel/botcontext" "github.com/TicketsBot/GoPanel/database" "github.com/TicketsBot/GoPanel/rpc" @@ -8,6 +9,7 @@ import ( "github.com/TicketsBot/common/premium" "github.com/gin-gonic/gin" "github.com/rxdn/gdl/rest" + "github.com/rxdn/gdl/rest/request" "strconv" ) @@ -64,8 +66,11 @@ func DeletePanel(ctx *gin.Context) { } if err := rest.DeleteMessage(botContext.Token, botContext.RateLimiter, panel.ChannelId, panel.MessageId); err != nil { - ctx.JSON(500, utils.ErrorJson(err)) - return + var unwrapped request.RestError + if !errors.As(err, &unwrapped) || unwrapped.StatusCode != 404 { + ctx.JSON(500, utils.ErrorJson(err)) + return + } } // Get premium tier diff --git a/app/http/middleware/logging.go b/app/http/middleware/logging.go index 0bcec8a..46c1dc4 100644 --- a/app/http/middleware/logging.go +++ b/app/http/middleware/logging.go @@ -9,19 +9,44 @@ import ( "strconv" ) -func Logging(minLevel sentry.Level) gin.HandlerFunc { +type Level uint8 + +const ( + LevelDebug Level = iota + LevelInfo + LevelWarning + LevelError + LevelFatal +) + +func (l Level) sentryLevel() sentry.Level { + switch l { + case LevelDebug: + return sentry.LevelDebug + case LevelInfo: + return sentry.LevelInfo + case LevelWarning: + return sentry.LevelWarning + case LevelError: + return sentry.LevelError + case LevelFatal: + return sentry.LevelFatal + default: + return sentry.LevelDebug + } +} + +func Logging(minLevel Level) gin.HandlerFunc { return func(ctx *gin.Context) { ctx.Next() statusCode := ctx.Writer.Status() - var level sentry.Level + level := LevelInfo if statusCode >= 500 { - level = sentry.LevelError + level = LevelError } else if statusCode >= 400 { - level = sentry.LevelWarning - } else { - level = sentry.LevelInfo + level = LevelWarning } if level < minLevel { @@ -49,7 +74,7 @@ func Logging(minLevel sentry.Level) gin.HandlerFunc { "response": string(responseBody), "stacktrace": string(debug.Stack()), }, - Level: level, + Level: level.sentryLevel(), Message: fmt.Sprintf("HTTP %d on %s %s", statusCode, ctx.Request.Method, ctx.FullPath()), Tags: map[string]string{ "status_code": strconv.Itoa(statusCode), diff --git a/app/http/middleware/ratelimit.go b/app/http/middleware/ratelimit.go index 0e40245..05db094 100644 --- a/app/http/middleware/ratelimit.go +++ b/app/http/middleware/ratelimit.go @@ -4,7 +4,6 @@ import ( "fmt" "github.com/TicketsBot/GoPanel/redis" "github.com/TicketsBot/GoPanel/utils" - "github.com/getsentry/sentry-go" "github.com/gin-gonic/gin" "github.com/go-redis/redis_rate/v9" "hash/fnv" @@ -39,7 +38,7 @@ func CreateRateLimiter(rlType RateLimitType, max int, period time.Duration) gin. res, err := limiter.Allow(redis.DefaultContext(), name, limit) if err != nil { ctx.AbortWithStatusJSON(500, utils.ErrorJson(err)) - Logging(sentry.LevelError)(ctx) + Logging(LevelError)(ctx) return } @@ -60,7 +59,6 @@ func CreateRateLimiter(rlType RateLimitType, max int, period time.Duration) gin. if res.Allowed <= 0 { ctx.AbortWithStatusJSON(429, utils.ErrorStr("You are being ratelimited")) - Logging(sentry.LevelWarning)(ctx) return } diff --git a/app/http/server.go b/app/http/server.go index 9bad432..7a8b848 100644 --- a/app/http/server.go +++ b/app/http/server.go @@ -19,7 +19,6 @@ import ( "github.com/TicketsBot/GoPanel/app/http/session" "github.com/TicketsBot/GoPanel/config" "github.com/TicketsBot/common/permission" - "github.com/getsentry/sentry-go" sentrygin "github.com/getsentry/sentry-go/gin" "github.com/gin-gonic/gin" "github.com/penglongli/gin-metrics/ginmetrics" @@ -42,7 +41,7 @@ func StartServer() { router.Use(gin.Recovery()) router.Use(middleware.MultiReadBody, middleware.ReadResponse) - router.Use(middleware.Logging(sentry.LevelError)) + router.Use(middleware.Logging(middleware.LevelError)) router.Use(sentrygin.New(sentrygin.Options{})) // Defaults are ok router.Use(rl(middleware.RateLimitTypeIp, 60, time.Minute)) @@ -108,7 +107,6 @@ func StartServer() { rl(middleware.RateLimitTypeGuild, 10, time.Second*30), rl(middleware.RateLimitTypeGuild, 75, time.Minute*30), api.SearchMembers, - middleware.Logging(sentry.LevelError), // TODO: Remove? ) // Must be readable to load transcripts page @@ -148,7 +146,6 @@ func StartServer() { rl(middleware.RateLimitTypeUser, 5, 5*time.Second), rl(middleware.RateLimitTypeUser, 20, time.Minute), api_transcripts.ListTranscripts, - middleware.Logging(sentry.LevelError), // TODO: Remove? ) // Allow regular users to get their own transcripts, make sure you check perms inside