diff --git a/src/widgets/feed/proxy.js b/src/widgets/feed/proxy.js index 7f58460c3..de54f645f 100644 --- a/src/widgets/feed/proxy.js +++ b/src/widgets/feed/proxy.js @@ -1,6 +1,6 @@ import cache from "memory-cache"; -import { parseFeed } from "./utils"; +import { httpUrl, parseFeed } from "./utils"; import getServiceWidget from "utils/config/service-helpers"; import createLogger from "utils/logger"; @@ -18,12 +18,11 @@ export default async function feedProxyHandler(req, res) { return res.status(400).json({ error: "Missing feed URL" }); } - let url; - try { - url = new URL(widget.url); - } catch { + const href = httpUrl(widget.url); + if (!href) { return res.status(400).json({ error: "Invalid feed URL" }); } + const url = new URL(href); const cacheKey = `feed:${url.href}`; let items = cache.get(cacheKey); diff --git a/src/widgets/feed/proxy.test.js b/src/widgets/feed/proxy.test.js index f713ea835..3c86ef70c 100644 --- a/src/widgets/feed/proxy.test.js +++ b/src/widgets/feed/proxy.test.js @@ -52,6 +52,12 @@ describe("widgets/feed/proxy", () => { await feedProxyHandler(req, res); expect(res.statusCode).toBe(400); expect(res.body).toEqual({ error: "Invalid feed URL" }); + + getServiceWidget.mockResolvedValueOnce({ type: "feed", url: "file:///etc/passwd" }); + res = createMockRes(); + await feedProxyHandler(req, res); + expect(res.statusCode).toBe(400); + expect(res.body).toEqual({ error: "Invalid feed URL" }); expect(httpProxy).not.toHaveBeenCalled(); });