diff --git a/api/src/misc/utils.js b/api/src/misc/utils.js index 76d7a3eb..a7c523a4 100644 --- a/api/src/misc/utils.js +++ b/api/src/misc/utils.js @@ -1,11 +1,11 @@ import { request } from 'undici'; const redirectStatuses = new Set([301, 302, 303, 307, 308]); -export async function getRedirectingURL(url, dispatcher, userAgent) { +export async function getRedirectingURL(url, dispatcher, headers) { const location = await request(url, { dispatcher, method: 'HEAD', - headers: { 'user-agent': userAgent } + headers: headers }).then(r => { if (redirectStatuses.has(r.statusCode) && r.headers['location']) { return r.headers['location']; diff --git a/api/src/processing/services/instagram.js b/api/src/processing/services/instagram.js index 9cc7dbdf..0fa25527 100644 --- a/api/src/processing/services/instagram.js +++ b/api/src/processing/services/instagram.js @@ -527,7 +527,7 @@ export default function instagram(obj) { // for some reason instagram decides to return HTML // instead of a redirect when requesting with a normal // browser user-agent - 'curl/7.88.1' + {'User-Agent': 'curl/7.88.1'} ).then(match => instagram({ ...obj, ...match, shareId: undefined diff --git a/api/src/processing/services/reddit.js b/api/src/processing/services/reddit.js index 3bd8e88f..e1eba244 100644 --- a/api/src/processing/services/reddit.js +++ b/api/src/processing/services/reddit.js @@ -53,27 +53,18 @@ export default async function(obj) { const accessToken = await getAccessToken(); if (params.shortId) { - let url = await fetch(`https://www.reddit.com/video/${params.shortId}`, { - headers: { - 'User-Agent': genericUserAgent, - 'Authorization': `Bearer ${accessToken}` - } - }).then(r => r.url).catch(() => {}); - - if (!url) return { error: "fetch.fail" }; - - try { - params = extract(normalizeURL(url)).patternMatch; - } catch (error) { - return { error: "fetch.fail" }; - } + params = await resolveRedirectingURL( + `https://www.reddit.com/video/${params.shortId}`, + obj.dispatcher, + {'User-Agent': genericUserAgent, 'Authorization': `Bearer ${accessToken}`} + ); } if (!params.id && params.shareId) { params = await resolveRedirectingURL( `https://www.reddit.com/r/${params.sub}/s/${params.shareId}`, obj.dispatcher, - genericUserAgent + {'User-Agent': genericUserAgent} ); } diff --git a/api/src/processing/url.js b/api/src/processing/url.js index a0f70fed..86c333f6 100644 --- a/api/src/processing/url.js +++ b/api/src/processing/url.js @@ -239,11 +239,11 @@ export function extract(url) { return { host, patternMatch }; } -export async function resolveRedirectingURL(url, dispatcher, userAgent) { +export async function resolveRedirectingURL(url, dispatcher, headers) { const originalService = getHostIfValid(normalizeURL(url)); if (!originalService) return; - const canonicalURL = await getRedirectingURL(url, dispatcher, userAgent); + const canonicalURL = await getRedirectingURL(url, dispatcher, headers); if (!canonicalURL) return; const { host, patternMatch } = extract(normalizeURL(canonicalURL));