Exclude domains from link previews
This commit is contained in:
parent
d42aec4dac
commit
ff4ea76005
2 changed files with 44 additions and 10 deletions
|
@ -17,30 +17,40 @@ describe('Link previews', () => {
|
||||||
assert.isFalse(shouldPreviewHref('https'));
|
assert.isFalse(shouldPreviewHref('https'));
|
||||||
assert.isFalse(shouldPreviewHref('https://'));
|
assert.isFalse(shouldPreviewHref('https://'));
|
||||||
assert.isFalse(shouldPreviewHref('https://bad url'));
|
assert.isFalse(shouldPreviewHref('https://bad url'));
|
||||||
assert.isFalse(shouldPreviewHref('example.com'));
|
assert.isFalse(shouldPreviewHref('signal.com'));
|
||||||
|
assert.isFalse(shouldPreviewHref('signal.org'));
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns false for non-HTTPS URLs', () => {
|
it('returns false for non-HTTPS URLs', () => {
|
||||||
assert.isFalse(shouldPreviewHref('http://example.com'));
|
assert.isFalse(shouldPreviewHref('http://signal.org'));
|
||||||
assert.isFalse(shouldPreviewHref('ftp://example.com'));
|
assert.isFalse(shouldPreviewHref('ftp://signal.org'));
|
||||||
assert.isFalse(shouldPreviewHref('file://example'));
|
assert.isFalse(shouldPreviewHref('file://signal'));
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns false if the link is "sneaky"', () => {
|
it('returns false if the link is "sneaky"', () => {
|
||||||
// See `isLinkSneaky` tests below for more thorough checking.
|
// See `isLinkSneaky` tests below for more thorough checking.
|
||||||
assert.isFalse(shouldPreviewHref('https://user:pass@example.com'));
|
assert.isFalse(shouldPreviewHref('https://user:pass@signal.org'));
|
||||||
assert.isFalse(shouldPreviewHref('https://aquí.example'));
|
assert.isFalse(shouldPreviewHref('https://aquí.signal'));
|
||||||
assert.isFalse(shouldPreviewHref('https://aqu%C3%AD.example'));
|
assert.isFalse(shouldPreviewHref('https://aqu%C3%AD.signal'));
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns false for skipped domains', () => {
|
it('returns false for skipped domains', () => {
|
||||||
assert.isFalse(shouldPreviewHref('https://debuglogs.org'));
|
assert.isFalse(shouldPreviewHref('https://debuglogs.org'));
|
||||||
|
assert.isFalse(shouldPreviewHref('https://example.com'));
|
||||||
|
assert.isFalse(shouldPreviewHref('https://new.example'));
|
||||||
|
assert.isFalse(shouldPreviewHref('https://onion'));
|
||||||
|
assert.isFalse(shouldPreviewHref('https://bloomin.onion'));
|
||||||
|
assert.isFalse(shouldPreviewHref('https://localhost'));
|
||||||
|
assert.isFalse(shouldPreviewHref('https://localhost:8080'));
|
||||||
|
assert.isFalse(shouldPreviewHref('https://abcd.test'));
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns true for "safe" urls', () => {
|
it('returns true for "safe" urls', () => {
|
||||||
assert.isTrue(shouldPreviewHref('https://example.com'));
|
assert.isTrue(shouldPreviewHref('https://signal.org'));
|
||||||
|
assert.isTrue(shouldPreviewHref('https://example.signal.org'));
|
||||||
|
assert.isTrue(shouldPreviewHref('https://myexample.com'));
|
||||||
assert.isTrue(
|
assert.isTrue(
|
||||||
shouldPreviewHref('https://example.com/foo/bar?query=string#hash')
|
shouldPreviewHref('https://signal.org/foo/bar?query=string#hash')
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -48,11 +48,35 @@ export function shouldPreviewHref(href: string): boolean {
|
||||||
return Boolean(
|
return Boolean(
|
||||||
url &&
|
url &&
|
||||||
url.protocol === 'https:' &&
|
url.protocol === 'https:' &&
|
||||||
url.hostname !== 'debuglogs.org' &&
|
!isDomainExcluded(url) &&
|
||||||
!isLinkSneaky(href)
|
!isLinkSneaky(href)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const EXCLUDED_DOMAINS = [
|
||||||
|
'debuglogs.org',
|
||||||
|
'example',
|
||||||
|
'example.com',
|
||||||
|
'example.net',
|
||||||
|
'example.org',
|
||||||
|
'invalid',
|
||||||
|
'localhost',
|
||||||
|
'onion',
|
||||||
|
'test',
|
||||||
|
];
|
||||||
|
|
||||||
|
function isDomainExcluded(url: URL): boolean {
|
||||||
|
for (const excludedDomain of EXCLUDED_DOMAINS) {
|
||||||
|
if (
|
||||||
|
url.hostname.endsWith(`.${excludedDomain}`) ||
|
||||||
|
url.hostname === excludedDomain
|
||||||
|
) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
const DIRECTIONAL_OVERRIDES = /[\u202c\u202d\u202e]/;
|
const DIRECTIONAL_OVERRIDES = /[\u202c\u202d\u202e]/;
|
||||||
const UNICODE_DRAWING = /[\u2500-\u25FF]/;
|
const UNICODE_DRAWING = /[\u2500-\u25FF]/;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue