From e8dbf9611e4f6317f1eee9370f134bc01a4757d2 Mon Sep 17 00:00:00 2001 From: MaxJa4 <74194322+MaxJa4@users.noreply.github.com> Date: Sun, 9 Feb 2025 16:46:02 +0100 Subject: [PATCH] Fix response decompression --- controllers/tracker_controller.go | 15 ++++++++++++--- utils/misc.go | 18 ++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/controllers/tracker_controller.go b/controllers/tracker_controller.go index d04cd15..c528e78 100644 --- a/controllers/tracker_controller.go +++ b/controllers/tracker_controller.go @@ -6,13 +6,14 @@ import ( "encoding/json" "errors" "fmt" - "github.com/gin-gonic/gin" "io" "math" "net" "net/http" "sort" "time" + + "github.com/gin-gonic/gin" ) // GetScoreByPlayerID GET /score/:player_id @@ -99,7 +100,7 @@ func getPlayerData(playerName string) (*models.TrackerDataJSON, int) { return nil, 0 } - req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36") + req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36") req.Header.Set("Accept-Encoding", "gzip, deflate, br") res, err := c.Do(req) @@ -128,8 +129,16 @@ func getPlayerData(playerName string) (*models.TrackerDataJSON, int) { return nil, res.StatusCode } + encoding := res.Header.Get("Content-Encoding") + reader, err := utils.DecompressResponseBody(encoding, res.Body) + if err != nil { + utils.Logger.Errorf("[SCORE] Failed to decompress response body: %s", err.Error()) + return nil, 0 + } + defer reader.Close() + var response models.TrackerDataJSON - body, err := io.ReadAll(res.Body) + body, err := io.ReadAll(reader) if err != nil { utils.Logger.Errorf("[SCORE] Failed to read response body: %s", err.Error()) return nil, 0 diff --git a/utils/misc.go b/utils/misc.go index 4a650ff..94dcf43 100644 --- a/utils/misc.go +++ b/utils/misc.go @@ -3,6 +3,11 @@ package utils import ( "crypto/rand" "encoding/hex" + "io" + + "github.com/andybalholm/brotli" + "github.com/klauspost/compress/flate" + "github.com/klauspost/compress/gzip" ) func GenerateActivationCode() string { @@ -12,3 +17,16 @@ func GenerateActivationCode() string { } return hex.EncodeToString(bytes) } + +func DecompressResponseBody(encoding string, body io.Reader) (io.ReadCloser, error) { + switch encoding { + case "gzip": + return gzip.NewReader(body) + case "deflate": + return flate.NewReader(body), nil + case "br": + return io.NopCloser(brotli.NewReader(body)), nil + default: + return io.NopCloser(body), nil + } +} \ No newline at end of file