0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-01-06 22:40:14 -05:00

🐛 Fixed fallback to bookmark card when pasting localhost Ghost url

no issue

- localhost check was causing an immediate "no provider" error when fetching oembed for a localhost url and bypassing the bookmark fallback even when the configured site lives on localhost
- allow `localhost:port` through in oembed endpoints when it matches the configured url
This commit is contained in:
Kevin Ansfield 2020-06-15 18:38:43 +01:00
parent ce8bc9d4bf
commit e0d1763424
2 changed files with 20 additions and 6 deletions

View file

@ -1,10 +1,11 @@
const {i18n} = require('../../lib/common');
const errors = require('@tryghost/errors'); const errors = require('@tryghost/errors');
const {extract, hasProvider} = require('oembed-parser'); const {extract, hasProvider} = require('oembed-parser');
const Promise = require('bluebird'); const Promise = require('bluebird');
const externalRequest = require('../../lib/request-external');
const cheerio = require('cheerio'); const cheerio = require('cheerio');
const _ = require('lodash'); const _ = require('lodash');
const config = require('../../../shared/config');
const {i18n} = require('../../lib/common');
const externalRequest = require('../../lib/request-external');
async function fetchBookmarkData(url, html) { async function fetchBookmarkData(url, html) {
const metascraper = require('metascraper')([ const metascraper = require('metascraper')([
@ -97,7 +98,13 @@ function isIpOrLocalhost(url) {
const IPV6_REGEX = /:/; // fqdns will not have colons const IPV6_REGEX = /:/; // fqdns will not have colons
const HTTP_REGEX = /^https?:/i; const HTTP_REGEX = /^https?:/i;
const {protocol, hostname} = new URL(url); const siteUrl = new URL(config.get('url'));
const {protocol, hostname, host} = new URL(url);
// allow requests to Ghost's own url through
if (siteUrl.host === host) {
return false;
}
if (!HTTP_REGEX.test(protocol) || hostname === 'localhost' || IPV4_REGEX.test(hostname) || IPV6_REGEX.test(hostname)) { if (!HTTP_REGEX.test(protocol) || hostname === 'localhost' || IPV4_REGEX.test(hostname) || IPV6_REGEX.test(hostname)) {
return true; return true;

View file

@ -1,10 +1,11 @@
const {i18n} = require('../../lib/common');
const errors = require('@tryghost/errors'); const errors = require('@tryghost/errors');
const {extract, hasProvider} = require('oembed-parser'); const {extract, hasProvider} = require('oembed-parser');
const Promise = require('bluebird'); const Promise = require('bluebird');
const externalRequest = require('../../lib/request-external');
const cheerio = require('cheerio'); const cheerio = require('cheerio');
const _ = require('lodash'); const _ = require('lodash');
const config = require('../../../shared/config');
const {i18n} = require('../../lib/common');
const externalRequest = require('../../lib/request-external');
const findUrlWithProvider = (url) => { const findUrlWithProvider = (url) => {
let provider; let provider;
@ -51,7 +52,13 @@ function isIpOrLocalhost(url) {
const IPV6_REGEX = /:/; // fqdns will not have colons const IPV6_REGEX = /:/; // fqdns will not have colons
const HTTP_REGEX = /^https?:/i; const HTTP_REGEX = /^https?:/i;
const {protocol, hostname} = new URL(url); const siteUrl = new URL(config.get('url'));
const {protocol, hostname, host} = new URL(url);
// allow requests to Ghost's own url through
if (siteUrl.host === host) {
return false;
}
if (!HTTP_REGEX.test(protocol) || hostname === 'localhost' || IPV4_REGEX.test(hostname) || IPV6_REGEX.test(hostname)) { if (!HTTP_REGEX.test(protocol) || hostname === 'localhost' || IPV4_REGEX.test(hostname) || IPV6_REGEX.test(hostname)) {
return true; return true;