@@ 2,6 2,7 @@
package main
import (
+ "context"
"crypto/tls"
"embed"
"encoding/json"
@@ 168,9 169,9 @@ func redirect(w http.ResponseWriter, r *http.Request, s string) {
http.Redirect(w, r, redirect, http.StatusSeeOther)
}
-func (fc *faceitChecker) checkStats(playerid string, data *faceitCSGO) error {
+func (fc *faceitChecker) checkStats(ctx context.Context, playerid string, data *faceitCSGO) error {
url := "https://open.faceit.com/data/v4/players/" + playerid + "/stats/csgo"
- req, err := http.NewRequest("GET", url, nil)
+ req, err := http.NewRequestWithContext(ctx, "GET", url, nil)
if err != nil {
return &statsError{"request"}
}
@@ 194,9 195,9 @@ func (fc *faceitChecker) checkStats(playerid string, data *faceitCSGO) error {
return json.Unmarshal(text, &data)
}
-func (fc *faceitChecker) checkBan(faceitID string) (bool, string, error) {
+func (fc *faceitChecker) checkBan(ctx context.Context, faceitID string) (bool, string, error) {
url := "https://api.faceit.com/sheriff/v1/bans/" + faceitID
- req, err := http.NewRequest("GET", url, nil)
+ req, err := http.NewRequestWithContext(ctx, "GET", url, nil)
if err != nil {
return false, "", err
}
@@ 229,10 230,10 @@ func (fc *faceitChecker) checkBan(faceitID string) (bool, string, error) {
return false, "", nil
}
-func (fc *faceitChecker) lastMatch(faceitID string) (time.Time, error) {
+func (fc *faceitChecker) lastMatch(ctx context.Context, faceitID string) (time.Time, error) {
var lastMatch time.Time
url := "https://open.faceit.com/data/v4/players/" + faceitID + "/history?game=csgo&limit=1"
- req, err := http.NewRequest("GET", url, nil)
+ req, err := http.NewRequestWithContext(ctx, "GET", url, nil)
if err != nil {
return lastMatch, err
}
@@ 307,11 308,11 @@ func getSteamProfile(url string) (*xmlSteam, error) {
}
// getFaceitPlayer returns a faceitInfo struct from a steamID64
-func (fc *faceitChecker) getFaceitPlayer(steamID64 string) (faceitInfo, error) {
+func (fc *faceitChecker) getFaceitPlayer(ctx context.Context, steamID64 string) (faceitInfo, error) {
var info faceitInfo
url := "https://open.faceit.com/data/v4/players?game=csgo&game_player_id=" + steamID64
- req, err := http.NewRequest("GET", url, nil)
+ req, err := http.NewRequestWithContext(ctx, "GET", url, nil)
if err != nil {
return info, fmt.Errorf("faceit API: %v", err)
}
@@ 465,7 466,7 @@ func (fc *faceitChecker) requestHandler(w http.ResponseWriter, r *http.Request)
slog.String("name", parsed[1]))
playerLogger.Debug("Checking player")
- data, err := fc.getFaceitPlayer(parsed[0])
+ data, err := fc.getFaceitPlayer(r.Context(), parsed[0])
if err != nil {
playerLogger.Error("Failed to get Faceit player",
slog.String("error", err.Error()))
@@ 474,7 475,7 @@ func (fc *faceitChecker) requestHandler(w http.ResponseWriter, r *http.Request)
}
var data2 faceitCSGO
- err = fc.checkStats(data.PlayerID, &data2)
+ err = fc.checkStats(r.Context(), data.PlayerID, &data2)
if err != nil {
playerLogger.Error("Failed to check stats",
slog.String("error", err.Error()))
@@ 482,7 483,7 @@ func (fc *faceitChecker) requestHandler(w http.ResponseWriter, r *http.Request)
continue
}
- banned, reason, err := fc.checkBan(data.PlayerID)
+ banned, reason, err := fc.checkBan(r.Context(), data.PlayerID)
if err != nil {
playerLogger.Error("Failed to check ban status",
slog.String("error", err.Error()))
@@ 497,7 498,7 @@ func (fc *faceitChecker) requestHandler(w http.ResponseWriter, r *http.Request)
status = ""
}
- lastMatch, err := fc.lastMatch(data.PlayerID)
+ lastMatch, err := fc.lastMatch(r.Context(), data.PlayerID)
if err != nil {
playerLogger.Error("Failed to retrieve last match",
slog.String("error", err.Error()))
@@ 534,7 535,7 @@ func (fc *faceitChecker) getElo(w http.ResponseWriter, r *http.Request) {
steamID64 := strings.TrimPrefix(r.URL.Path, "/api/elo/")
- data, err := fc.getFaceitPlayer(steamID64)
+ data, err := fc.getFaceitPlayer(r.Context(), steamID64)
if err != nil {
// Validate steamid; there are two possibilies: User entered correct steamID
// but has no Faceit account -> give him default elo or user entered wrong steamID