From 146b8908718043b42317be1104df6c9169400dad Mon Sep 17 00:00:00 2001 From: Mcchen1008 Date: Fri, 2 Oct 2026 11:18:08 +0000 Subject: [PATCH] =?UTF-8?q?fix(drivers):=20=E4=BF=AE=E5=A4=8D=20github=5Fr?= =?UTF-8?q?eleases=20gh=5Fproxy=20=E6=9D=A1=E4=BB=B6=E5=86=99=E5=8F=8D?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E4=BB=A3=E7=90=86=E6=B0=B8=E4=B8=8D=E7=94=9F?= =?UTF-8?q?=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit proxy() 原逻辑为 if (!p || url.startsWith("http")) return url, 而所有传入的 GitHub 下载 URL 均以 http 开头,导致 p + url 分支 永远不可达——配置了 gh_proxy 的用户直链仍直连 GitHub。 改为 if (p && url.startsWith("http")) return p + url,对齐上游 OpenList Go 版 drivers/github_releases 的 GhProxy 语义(代理非空 且 URL 为 http(s) 时加前缀)。附 3 个单元测试覆盖配置/未配置/ 非 http 链接三种情况。 Co-Authored-By: GLM --- .../drivers/github_releases/util.test.ts | 37 +++++++++++++++++++ src/backend/drivers/github_releases/util.ts | 4 +- 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 src/backend/drivers/github_releases/util.test.ts diff --git a/src/backend/drivers/github_releases/util.test.ts b/src/backend/drivers/github_releases/util.test.ts new file mode 100644 index 00000000..0fba3d72 --- /dev/null +++ b/src/backend/drivers/github_releases/util.test.ts @@ -0,0 +1,37 @@ +import test from "node:test" +import assert from "node:assert/strict" +import { ClientGithubReleases } from "./util" + +function clientWith(ghProxy?: string): ClientGithubReleases { + return new ClientGithubReleases({ + repo_structure: "example/repo", + ...(ghProxy !== undefined ? { gh_proxy: ghProxy } : {}), + }) +} + +function proxyOf(additionGhProxy: string | undefined, url: string): string { + const client = clientWith(additionGhProxy) + // proxy() 为私有方法,测试中通过索引访问 + return (client as unknown as { proxy: (u: string) => string }).proxy(url) +} + +test("gh_proxy 已配置时为 http(s) 下载链接加代理前缀", () => { + const url = "https://github.com/example/repo/releases/download/v1.0.0/app.zip" + assert.equal( + proxyOf("https://mirror.example.com", url), + "https://mirror.example.com" + url, + ) +}) + +test("gh_proxy 未配置时保持原链接不变", () => { + const url = "https://github.com/example/repo/releases/download/v1.0.0/app.zip" + assert.equal(proxyOf(undefined, url), url) + assert.equal(proxyOf("", url), url) +}) + +test("gh_proxy 已配置但链接非 http 开头时不加前缀(对齐上游 Go 版语义)", () => { + assert.equal( + proxyOf("https://mirror.example.com", "/relative/path"), + "/relative/path", + ) +}) diff --git a/src/backend/drivers/github_releases/util.ts b/src/backend/drivers/github_releases/util.ts index d3c9ade6..2945ff50 100644 --- a/src/backend/drivers/github_releases/util.ts +++ b/src/backend/drivers/github_releases/util.ts @@ -61,8 +61,8 @@ export class ClientGithubReleases { private proxy(url: string): string { const p = this.addition.gh_proxy || "" - if (!p || url.startsWith("http")) return url - return p + url + if (p && url.startsWith("http")) return p + url + return url } /** 解析挂载点对应的 org/repo */