Regression: Fix oembed (#19978)

pull/19955/head
Diego Sampaio 4 years ago committed by GitHub
parent be741d5835
commit 9922db1ca2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      app/oembed/client/oembedFrameWidget.html
  2. 67
      app/oembed/server/providers.js
  3. 18
      app/oembed/server/server.js

@ -23,7 +23,7 @@
{{#if meta.oembedDescription}}
<p>{{meta.oembedDescription}}</p>
{{/if}}
<iframe sandbox="allow-scripts" srcdoc={{meta.oembedHtml}}></iframe>
{{{meta.oembedHtml}}}
{{/unless}}
</blockquote>
{{/if}}

@ -101,31 +101,52 @@ callbacks.add('oembed:beforeGetUrlContent', function(data) {
return data;
}, callbacks.priority.MEDIUM, 'oembed-providers-before');
const cleanupOembed = (data) => {
if (!data?.meta) {
return data;
}
// remove oembedHtml key from original meta
const { oembedHtml, ...meta } = data.meta;
return {
...data,
meta,
};
};
callbacks.add('oembed:afterParseContent', function(data) {
if (data.parsedUrl && data.parsedUrl.query) {
let queryString = data.parsedUrl.query;
if (_.isString(data.parsedUrl.query)) {
queryString = QueryString.parse(data.parsedUrl.query);
}
if (queryString.url != null) {
const { url } = queryString;
const provider = providers.getProviderForUrl(url);
if (provider != null) {
if (data.content && data.content.body) {
try {
const metas = JSON.parse(data.content.body);
_.each(metas, function(value, key) {
if (_.isString(value)) {
data.meta[camelCase(`oembed_${ key }`)] = value;
}
});
data.meta.oembedUrl = url;
} catch (error) {
console.log(error);
}
}
if (!data || !data.url || !data.content?.body || !data.parsedUrl?.query) {
return cleanupOembed(data);
}
let queryString = data.parsedUrl.query;
if (_.isString(data.parsedUrl.query)) {
queryString = QueryString.parse(data.parsedUrl.query);
}
if (!queryString.url) {
return cleanupOembed(data);
}
const { url: originalUrl } = data;
const provider = providers.getProviderForUrl(originalUrl);
if (!provider) {
return cleanupOembed(data);
}
const { url } = queryString;
data.meta.oembedUrl = url;
try {
const metas = JSON.parse(data.content.body);
_.each(metas, function(value, key) {
if (_.isString(value)) {
data.meta[camelCase(`oembed_${ key }`)] = value;
}
}
});
} catch (error) {
console.log(error);
}
return data;
}, callbacks.priority.MEDIUM, 'oembed-providers-after');

@ -60,7 +60,7 @@ const toUtf8 = function(contentType, body) {
return iconv.decode(body, getCharset(contentType, body));
};
const getUrlContent = function(urlObj, redirectCount = 5, callback) {
const getUrlContent = Meteor.wrapAsync(function(urlObj, redirectCount = 5, callback) {
if (_.isString(urlObj)) {
urlObj = URL.parse(urlObj);
}
@ -142,10 +142,9 @@ const getUrlContent = function(urlObj, redirectCount = 5, callback) {
return stream.on('error', function(err) {
error = err;
});
};
});
OEmbed.getUrlMeta = function(url, withFragment) {
const getUrlContentSync = Meteor.wrapAsync(getUrlContent);
const urlObj = URL.parse(url);
if (withFragment != null) {
const queryStringObj = querystring.parse(urlObj.query);
@ -158,7 +157,7 @@ OEmbed.getUrlMeta = function(url, withFragment) {
}
urlObj.path = path;
}
const content = getUrlContentSync(urlObj, 5);
const content = getUrlContent(urlObj, 5);
if (!content) {
return;
}
@ -190,12 +189,11 @@ OEmbed.getUrlMeta = function(url, withFragment) {
if (metas.fragment === '!' && (withFragment == null)) {
return OEmbed.getUrlMeta(url, true);
}
delete metas.oembedHtml;
}
let headers = undefined;
let data = undefined;
if (content && content.headers) {
if (content?.headers) {
headers = {};
const headerObj = content.headers;
Object.keys(headerObj).forEach((header) => {
@ -203,15 +201,15 @@ OEmbed.getUrlMeta = function(url, withFragment) {
});
}
if (content && content.statusCode !== 200) {
return data;
return;
}
data = callbacks.run('oembed:afterParseContent', {
return callbacks.run('oembed:afterParseContent', {
url,
meta: metas,
headers,
parsedUrl: content.parsedUrl,
content,
});
return data;
};
OEmbed.getUrlMetaWithCache = function(url, withFragment) {

Loading…
Cancel
Save