Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhenyu Qi <qzydustin@hotmail.com>2026-01-02 18:12:13 +0300
committerGitHub <noreply@github.com>2026-01-02 18:12:13 +0300
commitc881d1015a72fed333bea04fb28b74d1f2517074 (patch)
tree0ef895ef21290d68100329c4298e3f1afd7732b8
parentc061337ce76f4b2dffc8a86340b0133538528576 (diff)
fix: handle GitHub API error responses in GetXrayVersions (#3609)
GitHub API returns JSON object instead of array when encountering errors (e.g., rate limit exceeded). This causes JSON unmarshal error: 'cannot unmarshal object into Go value of type []service.Release' Add HTTP status code check to handle error responses gracefully and return user-friendly error messages instead of JSON parsing errors. Fixes issue where getXrayVersion fails with unmarshal error when GitHub API rate limit is exceeded.
-rw-r--r--web/service/server.go12
1 files changed, 12 insertions, 0 deletions
diff --git a/web/service/server.go b/web/service/server.go
index d48a96c3..970c5c0f 100644
--- a/web/service/server.go
+++ b/web/service/server.go
@@ -529,6 +529,18 @@ func (s *ServerService) GetXrayVersions() ([]string, error) {
}
defer resp.Body.Close()
+ // Check HTTP status code - GitHub API returns object instead of array on error
+ if resp.StatusCode != http.StatusOK {
+ bodyBytes, _ := io.ReadAll(resp.Body)
+ var errorResponse struct {
+ Message string `json:"message"`
+ }
+ if json.Unmarshal(bodyBytes, &errorResponse) == nil && errorResponse.Message != "" {
+ return nil, fmt.Errorf("GitHub API error: %s", errorResponse.Message)
+ }
+ return nil, fmt.Errorf("GitHub API returned status %d: %s", resp.StatusCode, resp.Status)
+ }
+
buffer := bytes.NewBuffer(make([]byte, bufferSize))
buffer.Reset()
if _, err := buffer.ReadFrom(resp.Body); err != nil {