From d1f8bcefb6d5c363f16231032c3222a4bbb22f6c Mon Sep 17 00:00:00 2001 From: Kiko Beats Date: Mon, 18 Dec 2023 15:11:13 +0100 Subject: [PATCH] fix(audio): only consider http URLs --- packages/metascraper-audio/package.json | 1 + packages/metascraper-audio/src/index.js | 2 +- packages/metascraper-audio/test/iframe.js | 57 +++++++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 packages/metascraper-audio/test/iframe.js diff --git a/packages/metascraper-audio/package.json b/packages/metascraper-audio/package.json index 89a2ac77e..e1f93c7f5 100644 --- a/packages/metascraper-audio/package.json +++ b/packages/metascraper-audio/package.json @@ -28,6 +28,7 @@ "p-reflect": "~2.1.0" }, "devDependencies": { + "async-listen": "latest", "ava": "5" }, "engines": { diff --git a/packages/metascraper-audio/src/index.js b/packages/metascraper-audio/src/index.js index 0e501ac4c..004acbecf 100644 --- a/packages/metascraper-audio/src/index.js +++ b/packages/metascraper-audio/src/index.js @@ -79,7 +79,7 @@ module.exports = ({ getIframe = _getIframe } = {}) => { audio: audioRules.concat( async ({ htmlDom: $, url }) => { const srcs = [ - ...new $('iframe') + ...new $('iframe[src^="http"], iframe[src^="/"]') .map((_, element) => $(element).attr('src')) .get() .map(src => normalizeUrl(url, src)) diff --git a/packages/metascraper-audio/test/iframe.js b/packages/metascraper-audio/test/iframe.js new file mode 100644 index 000000000..6e70c829f --- /dev/null +++ b/packages/metascraper-audio/test/iframe.js @@ -0,0 +1,57 @@ +'use strict' + +const { default: listen } = require('async-listen') +const { createServer } = require('http') +const { promisify } = require('util') +const test = require('ava') + +const closeServer = server => promisify(server.close) + +const createMetascraper = (...args) => + require('metascraper')([require('../src')(...args)]) + +test('absolute http', async t => { + const server = createServer((_, res) => { + res.setHeader('Content-Type', 'text/html') + res.end( + '' + ) + }) + + t.teardown(() => closeServer(server)) + const url = (await listen(server, { port: 0, host: '0.0.0.0' })).toString() + const html = `