diff options
-rw-r--r-- | src/util/external-links.js | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/util/external-links.js b/src/util/external-links.js index 8ab8deca..f63b9244 100644 --- a/src/util/external-links.js +++ b/src/util/external-links.js @@ -443,7 +443,24 @@ export function getMatchingDescriptorsForExternalLink(url, descriptors, { } = {}) { const {domain, pathname, query} = urlParts(url); - const compareDomain = string => domain.includes(string); + const compareDomain = string => { + // A dot at the start of the descriptor's domain indicates + // we're looking to match a subdomain. + if (string.startsWith('.')) matchSubdomain: { + // "www" is never an acceptable subdomain for this purpose. + // Sorry to people whose usernames are www!! + if (domain.startsWith('www.')) { + break matchSubdomain; + } + + return domain.endsWith(string); + } + + // No dot means we're looking for an exact/full domain match. + // But let "www" pass here too, implicitly. + return domain === string || domain === 'www.' + string; + }; + const comparePathname = regex => regex.test(pathname.slice(1)); const compareQuery = regex => regex.test(query.slice(1)); |