Fix response decompression

This commit is contained in:
MaxJa4
2025-02-09 16:46:02 +01:00
parent 770a033429
commit e8dbf9611e
2 changed files with 30 additions and 3 deletions

View File

@@ -6,13 +6,14 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"github.com/gin-gonic/gin"
"io" "io"
"math" "math"
"net" "net"
"net/http" "net/http"
"sort" "sort"
"time" "time"
"github.com/gin-gonic/gin"
) )
// GetScoreByPlayerID GET /score/:player_id // GetScoreByPlayerID GET /score/:player_id
@@ -99,7 +100,7 @@ func getPlayerData(playerName string) (*models.TrackerDataJSON, int) {
return nil, 0 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") req.Header.Set("Accept-Encoding", "gzip, deflate, br")
res, err := c.Do(req) res, err := c.Do(req)
@@ -128,8 +129,16 @@ func getPlayerData(playerName string) (*models.TrackerDataJSON, int) {
return nil, res.StatusCode 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 var response models.TrackerDataJSON
body, err := io.ReadAll(res.Body) body, err := io.ReadAll(reader)
if err != nil { if err != nil {
utils.Logger.Errorf("[SCORE] Failed to read response body: %s", err.Error()) utils.Logger.Errorf("[SCORE] Failed to read response body: %s", err.Error())
return nil, 0 return nil, 0

View File

@@ -3,6 +3,11 @@ package utils
import ( import (
"crypto/rand" "crypto/rand"
"encoding/hex" "encoding/hex"
"io"
"github.com/andybalholm/brotli"
"github.com/klauspost/compress/flate"
"github.com/klauspost/compress/gzip"
) )
func GenerateActivationCode() string { func GenerateActivationCode() string {
@@ -12,3 +17,16 @@ func GenerateActivationCode() string {
} }
return hex.EncodeToString(bytes) 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
}
}