From c184a75f22301679291faa7d0e29a8d5345185c9 Mon Sep 17 00:00:00 2001 From: sagit Date: Wed, 11 Feb 2026 07:35:02 +0000 Subject: [PATCH] fix: use direct GitHub API for release queries instead of proxy The gcode.hostcentral.cc proxy only supports github.com file downloads, not api.github.com requests. API calls through the proxy returned 404 HTML pages, causing JSON decode error: invalid character '<'. Also updates repo name from flux-panel to flvx across upgrade and install URLs. --- go-backend/internal/http/handler/mutations.go | 2 +- go-backend/internal/http/handler/upgrade.go | 41 ++++++++++++++----- 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/go-backend/internal/http/handler/mutations.go b/go-backend/internal/http/handler/mutations.go index 41893c2..f46cb86 100644 --- a/go-backend/internal/http/handler/mutations.go +++ b/go-backend/internal/http/handler/mutations.go @@ -413,7 +413,7 @@ func (h *Handler) nodeInstall(w http.ResponseWriter, r *http.Request) { response.WriteJSON(w, response.Err(-2, err.Error())) return } - cmd := fmt.Sprintf("curl -L https://gcode.hostcentral.cc/https://github.com/Sagit-chu/flux-panel/releases/latest/download/install.sh -o ./install.sh && chmod +x ./install.sh && ./install.sh -a %s -s %s", processServerAddress(panelAddr), secret) + cmd := fmt.Sprintf("curl -L https://gcode.hostcentral.cc/https://github.com/Sagit-chu/flvx/releases/latest/download/install.sh -o ./install.sh && chmod +x ./install.sh && ./install.sh -a %s -s %s", processServerAddress(panelAddr), secret) response.WriteJSON(w, response.OK(cmd)) } diff --git a/go-backend/internal/http/handler/upgrade.go b/go-backend/internal/http/handler/upgrade.go index 1087b86..19b9dca 100644 --- a/go-backend/internal/http/handler/upgrade.go +++ b/go-backend/internal/http/handler/upgrade.go @@ -3,6 +3,7 @@ package handler import ( "encoding/json" "fmt" + "io" "net/http" "strings" "time" @@ -10,6 +11,13 @@ import ( "go-backend/internal/http/response" ) +const ( + githubRepo = "Sagit-chu/flvx" + githubProxy = "https://gcode.hostcentral.cc" + githubAPIBase = "https://api.github.com" + githubHTMLBase = "https://github.com" +) + func (h *Handler) nodeUpgrade(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { response.WriteJSON(w, response.ErrDefault("请求失败")) @@ -40,12 +48,12 @@ func (h *Handler) nodeUpgrade(w http.ResponseWriter, r *http.Request) { } downloadURL := fmt.Sprintf( - "https://gcode.hostcentral.cc/https://github.com/Sagit-chu/flux-panel/releases/download/%s/gost-{ARCH}", - version, + githubProxy+"/%s/%s/releases/download/%s/gost-{ARCH}", + githubHTMLBase, githubRepo, version, ) checksumURL := fmt.Sprintf( - "https://gcode.hostcentral.cc/https://github.com/Sagit-chu/flux-panel/releases/download/%s/gost-{ARCH}.sha256", - version, + githubProxy+"/%s/%s/releases/download/%s/gost-{ARCH}.sha256", + githubHTMLBase, githubRepo, version, ) result, err := h.wsServer.SendCommand(req.ID, "UpgradeAgent", map[string]interface{}{ @@ -71,7 +79,7 @@ func resolveLatestRelease() (string, error) { Timeout: 10 * time.Second, } - resp, err := client.Get("https://gcode.hostcentral.cc/https://github.com/Sagit-chu/flux-panel/releases/latest") + resp, err := client.Get(githubProxy + "/" + githubHTMLBase + "/" + githubRepo + "/releases/latest") if err != nil { return "", fmt.Errorf("请求GitHub失败: %v", err) } @@ -97,12 +105,17 @@ func resolveLatestRelease() (string, error) { func resolveLatestReleaseAPI() (string, error) { client := &http.Client{Timeout: 10 * time.Second} - resp, err := client.Get("https://gcode.hostcentral.cc/https://api.github.com/repos/Sagit-chu/flux-panel/releases/latest") + resp, err := client.Get(githubAPIBase + "/repos/" + githubRepo + "/releases/latest") if err != nil { return "", fmt.Errorf("请求GitHub API失败: %v", err) } defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + body, _ := io.ReadAll(io.LimitReader(resp.Body, 512)) + return "", fmt.Errorf("GitHub API返回 %d: %s", resp.StatusCode, string(body)) + } + var release struct { TagName string `json:"tag_name"` } @@ -146,12 +159,12 @@ func (h *Handler) nodeBatchUpgrade(w http.ResponseWriter, r *http.Request) { } downloadURL := fmt.Sprintf( - "https://gcode.hostcentral.cc/https://github.com/Sagit-chu/flux-panel/releases/download/%s/gost-{ARCH}", - version, + githubProxy+"/%s/%s/releases/download/%s/gost-{ARCH}", + githubHTMLBase, githubRepo, version, ) checksumURL := fmt.Sprintf( - "https://gcode.hostcentral.cc/https://github.com/Sagit-chu/flux-panel/releases/download/%s/gost-{ARCH}.sha256", - version, + githubProxy+"/%s/%s/releases/download/%s/gost-{ARCH}.sha256", + githubHTMLBase, githubRepo, version, ) type upgradeResult struct { @@ -186,13 +199,19 @@ func (h *Handler) listReleases(w http.ResponseWriter, r *http.Request) { } client := &http.Client{Timeout: 15 * time.Second} - resp, err := client.Get("https://gcode.hostcentral.cc/https://api.github.com/repos/Sagit-chu/flux-panel/releases?per_page=20") + resp, err := client.Get(githubAPIBase + "/repos/" + githubRepo + "/releases?per_page=20") if err != nil { response.WriteJSON(w, response.Err(-2, fmt.Sprintf("获取版本列表失败: %v", err))) return } defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + body, _ := io.ReadAll(io.LimitReader(resp.Body, 512)) + response.WriteJSON(w, response.Err(-2, fmt.Sprintf("获取版本列表失败: GitHub API返回 %d: %s", resp.StatusCode, string(body)))) + return + } + var releases []struct { TagName string `json:"tag_name"` Name string `json:"name"`