From 54a41f2431c3d60f5845a15447f13413299e41f2 Mon Sep 17 00:00:00 2001 From: memdmp Date: Mon, 24 Feb 2025 01:09:00 +0100 Subject: feat: da extension --- examples/i2p.ts | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 examples/i2p.ts (limited to 'examples/i2p.ts') diff --git a/examples/i2p.ts b/examples/i2p.ts new file mode 100644 index 0000000..b9b29c4 --- /dev/null +++ b/examples/i2p.ts @@ -0,0 +1,48 @@ +// This example allows entering i2p eepsites into your URL bar - and assuming you're using duckduckgo, it will send you to the eepsite instead. + +import type Browser from 'webextension-polyfill'; +declare const browser: typeof Browser; +// ^ above 2 lines are optional, and only useful to allow the examples directory to not complain. The extension's monaco already defines the type of the browser global. + +browser.webRequest.onBeforeRequest.addListener( + (requestDetails) => { + const url = new URL(requestDetails.url); + const params = url.searchParams; + let query = params.get('q'); + if (!query || !query.includes('.i2p')) { + return; + } else { + try { + query = query.trim(); + if (!query.startsWith('http://') && !query.startsWith('https://')) + query = `https://${query}`; + let url = new URL(query); + if (url.hostname === 'uwu' && url.protocol === 'https') { + url.protocol = 'http'; + url = new URL(url.href.replace('bad.b32.i2p/', '')); + } + if (url.hostname.endsWith('.i2p')) + return { + redirectUrl: url.href, + }; + else return; + } catch (error) { + console.warn( + 'Failed to get i2p link for', + query, + '-', + error, + '\nThis may be someone just searching a genuine search.' + ); + // Comment the below out if you don't want to cancel failed attempts at loading eepsites. Note that continuing as if nothing happened can leak information. It's recommended to only ever temporarily comment it out. + return { + cancel: true, + }; + } + } + }, + { + urls: ['https://duckduckgo.com/*q=*', 'https://*.duckduckgo.com/*q=*'], + }, + ['blocking'] +); -- cgit v1.2.3