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"
"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

View File

@@ -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
}
}