diff --git a/src/router/video.ts b/src/router/video.ts index 76283a5..884062f 100644 --- a/src/router/video.ts +++ b/src/router/video.ts @@ -55,6 +55,34 @@ app.get('/watch', async ({ query: { v }, set, redirect, error }) => { .execute() } + DOMPurify.addHook('afterSanitizeAttributes', function (node) { + if (node.tagName === 'A') { + const disallowedPatterns: RegExp[] = [ + /\/playlist/i, + /\/hashtag\//i, + /\/live\//i, + /\/user\//i, + /\/shorts\//i, + /\/c\//i, + /\/@[^\/]/i + ]; + const href = node.getAttribute('href') || ''; + + const shouldConvertToSpan = disallowedPatterns.some(pattern => + pattern.test(href) + ); + + if (shouldConvertToSpan) { + const span = node.ownerDocument.createElement('span'); + span.innerHTML = node.innerHTML; + if (node.className) span.className = node.className; + node.parentNode?.replaceChild(span, node); + } else { + node.setAttribute('rel', 'nofollow noopener noreferrer'); + } + } + }) + const html = await m(eta.render('./watch', { transparency, ...json,