Add prefetchMaxSearchSize to override limit for link previews

YouTube puts the opengraph tags needed for the preview after ~300KB in the body
instead of the beginning of the <head> tag.
Instead of hardcoding the value, allow the server admin to set the policy as
they prefer.
This commit is contained in:
Reto Brunner 2020-12-30 11:52:12 +01:00
parent f99e4eef77
commit 7c17662fea
2 changed files with 16 additions and 3 deletions

View file

@ -150,6 +150,14 @@ module.exports = {
// This value is set to `2048` kilobytes by default. // This value is set to `2048` kilobytes by default.
prefetchMaxImageSize: 2048, prefetchMaxImageSize: 2048,
// ### prefetchMaxSearchSize
//
// This value controls the maximum request size made to find the link preview
// Open Graph tags. For some sites like YouTube this can easily exceed 300 kilobytes.
//
// This value is set to 50 kilobytes by default.
prefetchMaxSearchSize: 50,
// ### `fileUpload` // ### `fileUpload`
// //
// Allow uploading files to the server hosting The Lounge. // Allow uploading files to the server hosting The Lounge.

View file

@ -407,9 +407,14 @@ function fetch(uri, headers) {
// We don't need to download the file any further after we received content-type header // We don't need to download the file any further after we received content-type header
gotStream.destroy(); gotStream.destroy();
} else { } else {
// if not image, limit download to 50kb, since we need only meta tags // if not image, limit download to the max search size, since we need only meta tags
// twitter.com sends opengraph meta tags within ~20kb of data for individual tweets // twitter.com sends opengraph meta tags within ~20kb of data for individual tweets, the default is set to 50.
limit = 1024 * 50; // for sites like Youtube the og tags are in the first 300K and hence this is configurable by the admin
limit =
"prefetchMaxSearchSize" in Helper.config
? Helper.config.prefetchMaxSearchSize * 1024
: // set to the previous size if config option is unset
50 * 1024;
} }
}) })
.on("error", (e) => reject(e)) .on("error", (e) => reject(e))