fix(sites): keep signed API downloads outside browser sessions
This commit is contained in:
1 parent
36f3ece5b5
commit
e72983ecee
2 files changed
+14
-2
No files matched your search
@@ -332,7 +332,9 @@ export async function downloadTorrentFile(
|
|||||||
const res = await siteFetch(ctx.http, url, {
|
const res = await siteFetch(ctx.http, url, {
|
||||||
method: "GET",
|
method: "GET",
|
||||||
headers,
|
headers,
|
||||||
...(opts.cookie ? { redirect: "manual" as const } : {}),
|
...(opts.cookie
|
||||||
|
? { redirect: "manual" as const }
|
||||||
|
: { credentials: "omit" as const, referrerPolicy: "no-referrer" as const }),
|
||||||
...(ctx.signal ? { signal: ctx.signal } : {}),
|
...(ctx.signal ? { signal: ctx.signal } : {}),
|
||||||
});
|
});
|
||||||
const verifiedAt = ctx.http.now().toISOString();
|
const verifiedAt = ctx.http.now().toISOString();
|
||||||
|
|||||||
@@ -54,11 +54,21 @@ describe("Milkie API", () => {
|
|||||||
it("下载时编码当前API Key;缺凭据、无效凭据与响应结构各自报错", async () => {
|
it("下载时编码当前API Key;缺凭据、无效凭据与响应结构各自报错", async () => {
|
||||||
const mock = createMockFetch({ "/api/v1/torrents": { body: {} } });
|
const mock = createMockFetch({ "/api/v1/torrents": { body: {} } });
|
||||||
const torrent = withTorrent(mock.fetch, (url) => url.pathname.endsWith("/torrent"));
|
const torrent = withTorrent(mock.fetch, (url) => url.pathname.endsWith("/torrent"));
|
||||||
const adapter = adapterWith(def, milkieSpider, torrent.fetch, { apiKey: "a+b/&secret" });
|
const requests: RequestInit[] = [];
|
||||||
|
const adapter = adapterWith(
|
||||||
|
def,
|
||||||
|
milkieSpider,
|
||||||
|
(input, init) => {
|
||||||
|
requests.push(init ?? {});
|
||||||
|
return torrent.fetch(input, init);
|
||||||
|
},
|
||||||
|
{ apiKey: "a+b/&secret" },
|
||||||
|
);
|
||||||
await adapter.downloadTarget(id);
|
await adapter.downloadTarget(id);
|
||||||
expect(torrent.hits[0]!.url.searchParams.get("key")).toBe("a+b/&secret");
|
expect(torrent.hits[0]!.url.searchParams.get("key")).toBe("a+b/&secret");
|
||||||
expect(torrent.hits[0]!.url.pathname).toBe(`/api/v1/torrents/${id}/torrent`);
|
expect(torrent.hits[0]!.url.pathname).toBe(`/api/v1/torrents/${id}/torrent`);
|
||||||
expect(torrent.hits[0]!.headers.get("x-milkie-auth")).toBeNull();
|
expect(torrent.hits[0]!.headers.get("x-milkie-auth")).toBeNull();
|
||||||
|
expect(requests[0]).toMatchObject({ credentials: "omit", referrerPolicy: "no-referrer" });
|
||||||
await expectSiteError(adapter.list(1), "parse_error");
|
await expectSiteError(adapter.list(1), "parse_error");
|
||||||
await expectSiteError(adapterWith(def, milkieSpider, mock.fetch, {}).list(1), "auth_missing");
|
await expectSiteError(adapterWith(def, milkieSpider, mock.fetch, {}).list(1), "auth_missing");
|
||||||
const denied = createMockFetch({ "/api/v1/torrents": { status: 401 } });
|
const denied = createMockFetch({ "/api/v1/torrents": { status: 401 } });
|
||||||
|
|||||||
Reference in new issue
Block a user