Only warn on links to bsky.app if it represents itself as another url (#1662)
* Only warn on links to bsky.app if it represents itself as another url (close #1652) * Clean upzio/stable
parent
e878da04a1
commit
4d450da194
|
@ -27,6 +27,42 @@ describe('linkRequiresWarning', () => {
|
||||||
['http://site.pages', 'http://site.pages.dev', true],
|
['http://site.pages', 'http://site.pages.dev', true],
|
||||||
['http://site.pages.dev', 'site.pages', true],
|
['http://site.pages.dev', 'site.pages', true],
|
||||||
['http://site.pages', 'site.pages.dev', true],
|
['http://site.pages', 'site.pages.dev', true],
|
||||||
|
['http://bsky.app/profile/bob.test/post/3kbeuduu7m22v', 'my post', false],
|
||||||
|
['https://bsky.app/profile/bob.test/post/3kbeuduu7m22v', 'my post', false],
|
||||||
|
['http://bsky.app/', 'bluesky', false],
|
||||||
|
['https://bsky.app/', 'bluesky', false],
|
||||||
|
[
|
||||||
|
'http://bsky.app/profile/bob.test/post/3kbeuduu7m22v',
|
||||||
|
'http://bsky.app/profile/bob.test/post/3kbeuduu7m22v',
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'https://bsky.app/profile/bob.test/post/3kbeuduu7m22v',
|
||||||
|
'http://bsky.app/profile/bob.test/post/3kbeuduu7m22v',
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'http://bsky.app/',
|
||||||
|
'http://bsky.app/profile/bob.test/post/3kbeuduu7m22v',
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'https://bsky.app/',
|
||||||
|
'http://bsky.app/profile/bob.test/post/3kbeuduu7m22v',
|
||||||
|
false,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'http://bsky.app/profile/bob.test/post/3kbeuduu7m22v',
|
||||||
|
'https://google.com',
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'https://bsky.app/profile/bob.test/post/3kbeuduu7m22v',
|
||||||
|
'https://google.com',
|
||||||
|
true,
|
||||||
|
],
|
||||||
|
['http://bsky.app/', 'https://google.com', true],
|
||||||
|
['https://bsky.app/', 'https://google.com', true],
|
||||||
|
|
||||||
// bad uri inputs, default to true
|
// bad uri inputs, default to true
|
||||||
['', '', true],
|
['', '', true],
|
||||||
|
|
|
@ -170,15 +170,32 @@ export function getYoutubeVideoId(link: string): string | undefined {
|
||||||
|
|
||||||
export function linkRequiresWarning(uri: string, label: string) {
|
export function linkRequiresWarning(uri: string, label: string) {
|
||||||
const labelDomain = labelToDomain(label)
|
const labelDomain = labelToDomain(label)
|
||||||
if (!labelDomain) {
|
let urip
|
||||||
return true
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
const urip = new URL(uri)
|
urip = new URL(uri)
|
||||||
return labelDomain !== urip.hostname
|
|
||||||
} catch {
|
} catch {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (urip.hostname === 'bsky.app') {
|
||||||
|
// if this is a link to internal content,
|
||||||
|
// warn if it represents itself as a URL to another app
|
||||||
|
if (
|
||||||
|
labelDomain &&
|
||||||
|
labelDomain !== 'bsky.app' &&
|
||||||
|
isPossiblyAUrl(labelDomain)
|
||||||
|
) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
} else {
|
||||||
|
// if this is a link to external content,
|
||||||
|
// warn if the label doesnt match the target
|
||||||
|
if (!labelDomain) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return labelDomain !== urip.hostname
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function labelToDomain(label: string): string | undefined {
|
function labelToDomain(label: string): string | undefined {
|
||||||
|
|
Loading…
Reference in New Issue