From c89f9cd7852ecd94a1c00569f6e80e542a34a517 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Wed, 16 Mar 2022 10:59:34 +0300 Subject: Added librarian #78 --- src/assets/javascripts/helpers/general.js | 1 + src/assets/javascripts/helpers/imgur.js | 2 +- src/assets/javascripts/helpers/lbry.js | 205 ++++++++++++++++++++++ src/assets/javascripts/helpers/maps.js | 2 +- src/assets/javascripts/helpers/pixiv.js | 2 +- src/assets/javascripts/helpers/reddit.js | 4 +- src/assets/javascripts/helpers/search.js | 4 +- src/assets/javascripts/helpers/sendTargets.js | 4 +- src/assets/javascripts/helpers/tiktok.js | 2 +- src/assets/javascripts/helpers/twitter.js | 8 +- src/assets/javascripts/helpers/wikipedia.js | 2 +- src/assets/javascripts/helpers/youtube/youtube.js | 14 +- src/assets/javascripts/helpers/youtubeMusic.js | 2 +- 13 files changed, 229 insertions(+), 23 deletions(-) create mode 100644 src/assets/javascripts/helpers/lbry.js (limited to 'src/assets/javascripts/helpers') diff --git a/src/assets/javascripts/helpers/general.js b/src/assets/javascripts/helpers/general.js index c542d88b..a655fa74 100644 --- a/src/assets/javascripts/helpers/general.js +++ b/src/assets/javascripts/helpers/general.js @@ -118,6 +118,7 @@ let allPopupFrontends = [ "wikipedia", "medium", "peertube", + "lbry", "sendTargets" ]; diff --git a/src/assets/javascripts/helpers/imgur.js b/src/assets/javascripts/helpers/imgur.js index e3e21ecc..73f62c5d 100644 --- a/src/assets/javascripts/helpers/imgur.js +++ b/src/assets/javascripts/helpers/imgur.js @@ -3,7 +3,7 @@ window.browser = window.browser || window.chrome; import commonHelper from './common.js' const targets = [ - /^https?:\/\/(i|).?imgur\.com(\/.*)?$/ + /^https?:\/{2}(i|).?imgur\.com(\/.*)?$/ ]; let redirects = { diff --git a/src/assets/javascripts/helpers/lbry.js b/src/assets/javascripts/helpers/lbry.js new file mode 100644 index 00000000..c1eb4600 --- /dev/null +++ b/src/assets/javascripts/helpers/lbry.js @@ -0,0 +1,205 @@ +window.browser = window.browser || window.chrome; + +import commonHelper from './common.js' + +let targets = ["odysee.com"]; + +let redirects = { + "librarian": { + "normal": [ + "https://lbry.bcow.xyz", + "https://odysee.076.ne.jp", + "https://lbry.ix.tc", + "https://librarian.pussthecat.org", + "https://lbry.mutahar.rocks", + "https://librarian.esmailelbob.xyz", + ], + "tor": [ + "http://ecc5mi5ncdw6mxhjz6re6g2uevtpbzxjvxgrxia2gyvrlnil3srbnhyd.onion", + "http://vrmbc4brkgkaysmi3fenbzkayobxjh24slmhtocambn3ewe62iuqt3yd.onion", + ] + } +} + +const getRedirects = () => redirects; +const getCustomRedirects = function () { + return { + "librarian": { + "normal": [...librarianNormalRedirectsChecks, ...librarianNormalCustomRedirects] + }, + }; +}; + +function setRedirects(val) { + redirects.librarian = val; + browser.storage.local.set({ lbryTargetsRedirects: redirects }) + console.log("lbryTargetsRedirects: ", val) + for (const item of librarianNormalRedirectsChecks) + if (!redirects.librarian.normal.includes(item)) { + var index = librarianNormalRedirectsChecks.indexOf(item); + if (index !== -1) librarianNormalRedirectsChecks.splice(index, 1); + } + setLibrarianNormalRedirectsChecks(librarianNormalRedirectsChecks); + + for (const item of librarianTorRedirectsChecks) + if (!redirects.librarian.normal.includes(item)) { + var index = librarianTorRedirectsChecks.indexOf(item); + if (index !== -1) librarianTorRedirectsChecks.splice(index, 1); + } + setLibrarianTorRedirectsChecks(librarianTorRedirectsChecks); +} + +let librarianNormalRedirectsChecks; +const getLibrarianNormalRedirectsChecks = () => librarianNormalRedirectsChecks; +function setLibrarianNormalRedirectsChecks(val) { + librarianNormalRedirectsChecks = val; + browser.storage.local.set({ librarianNormalRedirectsChecks }) + console.log("librarianNormalRedirectsChecks: ", val) +} + +let librarianTorRedirectsChecks; +const getLibrarianTorRedirectsChecks = () => librarianTorRedirectsChecks; +function setLibrarianTorRedirectsChecks(val) { + librarianTorRedirectsChecks = val; + browser.storage.local.set({ librarianTorRedirectsChecks }) + console.log("librarianTorRedirectsChecks: ", val) +} + +let librarianNormalCustomRedirects = []; +const getLibrarianNormalCustomRedirects = () => librarianNormalCustomRedirects; +function setLibrarianNormalCustomRedirects(val) { + librarianNormalCustomRedirects = val; + browser.storage.local.set({ librarianNormalCustomRedirects }) + console.log("librarianNormalCustomRedirects: ", val) +} + +let librarianTorCustomRedirects = []; +const getLibrarianTorCustomRedirects = () => librarianTorCustomRedirects; +function setLibrarianTorCustomRedirects(val) { + librarianTorCustomRedirects = val; + browser.storage.local.set({ librarianTorCustomRedirects }) + console.log("librarianTorCustomRedirects: ", val) +} + +let disable; +const getDisable = () => disable; +function setDisable(val) { + disable = val; + browser.storage.local.set({ disableLbryTargets: disable }) +} + +let protocol; +const getProtocol = () => protocol; +function setProtocol(val) { + protocol = val; + browser.storage.local.set({ lbryTargetsProtocol: val }) + console.log("lbryTargetsProtocol: ", val) +} + +function changeInstance(url) { + let protocolHost = `${url.protocol}//${url.host}`; + + let librarianList = [ + ...redirects.librarian.normal, + ...redirects.librarian.tor, + ...librarianNormalCustomRedirects, + ...librarianTorCustomRedirects, + ]; + + if (!librarianList.includes(protocolHost)) return; + + let instancesList; + if (protocol == 'normal') instancesList = [...librarianNormalRedirectsChecks, ...librarianNormalCustomRedirects]; + else if (protocol == 'tor') instancesList = [...librarianTorRedirectsChecks, ...librarianTorCustomRedirects]; + + console.log("instancesList", instancesList); + let index = instancesList.indexOf(protocolHost); + if (index > -1) instancesList.splice(index, 1); + + if (instancesList.length === 0) return null; + + let randomInstance = commonHelper.getRandomInstance(instancesList); + return `${randomInstance}${url.pathname}${url.search}`; +} + +function redirect(url, type, initiator) { + if (disable) return null; + if (initiator && ([...redirects.librarian.normal, ...librarianNormalCustomRedirects].includes(initiator.origin) || targets.includes(initiator.host))) return null; + if (!targets.includes(url.host)) return null; + + if (type != "main_frame") return null; + + let instancesList; + if (protocol == 'normal') instancesList = [...librarianNormalRedirectsChecks, ...librarianNormalCustomRedirects]; + if (protocol == 'tor') instancesList = [...librarianTorRedirectsChecks, ...librarianTorCustomRedirects]; + if (instancesList.length === 0) return null; + let randomInstance = commonHelper.getRandomInstance(instancesList); + + return `${randomInstance}${url.pathname}${url.search}`; +} + +async function init() { + return new Promise(resolve => { + fetch('/instances/data.json').then(response => response.text()).then(data => { + let dataJson = JSON.parse(data); + browser.storage.local.get( + [ + "disableLbryTargets", + "lbryTargetsRedirects", + + "librarianNormalRedirectsChecks", + "librarianNormalCustomRedirects", + + "librarianTorRedirectsChecks", + "librarianTorCustomRedirects", + + "lbryTargetsProtocol" + ], + r => { + + disable = r.disableLbryTargets ?? true; + + protocol = r.lbryTargetsProtocol ?? "normal"; + + if (r.lbryTargetsRedirects) redirects = r.lbryTargetsRedirects; + + librarianNormalRedirectsChecks = r.librarianNormalRedirectsChecks ?? [...redirects.librarian.normal]; + librarianNormalCustomRedirects = r.librarianNormalCustomRedirects ?? []; + + librarianTorRedirectsChecks = r.librarianTorRedirectsChecks ?? [...redirects.librarian.tor]; + librarianTorCustomRedirects = r.librarianTorCustomRedirects ?? []; + + resolve(); + } + ) + }); + }); +} + +export default { + + getRedirects, + getCustomRedirects, + setRedirects, + + getDisable, + setDisable, + + getProtocol, + setProtocol, + + getLibrarianNormalRedirectsChecks, + setLibrarianNormalRedirectsChecks, + getLibrarianTorRedirectsChecks, + setLibrarianTorRedirectsChecks, + + getLibrarianTorCustomRedirects, + setLibrarianTorCustomRedirects, + getLibrarianNormalCustomRedirects, + setLibrarianNormalCustomRedirects, + + changeInstance, + + redirect, + init, +}; diff --git a/src/assets/javascripts/helpers/maps.js b/src/assets/javascripts/helpers/maps.js index 73d73308..c340557d 100644 --- a/src/assets/javascripts/helpers/maps.js +++ b/src/assets/javascripts/helpers/maps.js @@ -1,7 +1,7 @@ window.browser = window.browser || window.chrome; import commonHelper from './common.js' -const targets = /^https?:\/\/(((www|maps)\.)?(google\.).*(\/maps)|maps\.(google\.).*)/; +const targets = /^https?:\/{2}(((www|maps)\.)?(google\.).*(\/maps)|maps\.(google\.).*)/; let redirects = { 'osm': { "normal": [ diff --git a/src/assets/javascripts/helpers/pixiv.js b/src/assets/javascripts/helpers/pixiv.js index 236afa87..86ef6509 100644 --- a/src/assets/javascripts/helpers/pixiv.js +++ b/src/assets/javascripts/helpers/pixiv.js @@ -3,7 +3,7 @@ window.browser = window.browser || window.chrome; import commonHelper from './common.js' const targets = [ - /^https?:\/\/(www\.|)pixiv\.net.*/ + /^https?:\/{2}(www\.|)pixiv\.net.*/ ]; let redirects = { diff --git a/src/assets/javascripts/helpers/reddit.js b/src/assets/javascripts/helpers/reddit.js index e4347311..500a3925 100644 --- a/src/assets/javascripts/helpers/reddit.js +++ b/src/assets/javascripts/helpers/reddit.js @@ -3,8 +3,8 @@ window.browser = window.browser || window.chrome; import commonHelper from './common.js' const targets = [ - /^https?:\/\/(www\.|old\.|np\.|new\.|amp\.|)reddit\.com/, - /^https?:\/\/(i\.|preview\.)redd\.it/, + /^https?:\/{2}(www\.|old\.|np\.|new\.|amp\.|)reddit\.com/, + /^https?:\/{2}(i\.|preview\.)redd\.it/, ]; let redirects = { // modern UI diff --git a/src/assets/javascripts/helpers/search.js b/src/assets/javascripts/helpers/search.js index f2610925..85865f67 100644 --- a/src/assets/javascripts/helpers/search.js +++ b/src/assets/javascripts/helpers/search.js @@ -4,8 +4,8 @@ import commonHelper from './common.js' const targets = [ /^https?:\/{2}(www\.|search\.|)google(\.[a-z]{2,3}){1,2}(\/search(\?.*|$)|\/$)/, - /^https?:\/\/libredirect\.invalid/ - // /^https?:\/\/yandex\.com(\...|)(\/search\/..*|\/$)/, + /^https?:\/{2}libredirect\.invalid/ + // /^https?:\/{2}yandex\.com(\...|)(\/search\/..*|\/$)/, ]; let redirects = { "searx": { diff --git a/src/assets/javascripts/helpers/sendTargets.js b/src/assets/javascripts/helpers/sendTargets.js index 4987b851..d0691567 100644 --- a/src/assets/javascripts/helpers/sendTargets.js +++ b/src/assets/javascripts/helpers/sendTargets.js @@ -3,9 +3,9 @@ window.browser = window.browser || window.chrome; import commonHelper from './common.js' const targets = [ - /^https?:\/\/send.invalid\/$/, + /^https?:\/{2}send.invalid\/$/, /^ https ?: \/\/send\.firefox\.com\/$/, - /^https?:\/\/sendfiles\.online\/$/ + /^https?:\/{2}sendfiles\.online\/$/ ]; let redirects = { diff --git a/src/assets/javascripts/helpers/tiktok.js b/src/assets/javascripts/helpers/tiktok.js index 7f1d15fc..671e6427 100644 --- a/src/assets/javascripts/helpers/tiktok.js +++ b/src/assets/javascripts/helpers/tiktok.js @@ -3,7 +3,7 @@ window.browser = window.browser || window.chrome; import commonHelper from './common.js' const targets = [ - /^https?:\/\/(www\.|)tiktok\.com.*/ + /^https?:\/{2}(www\.|)tiktok\.com.*/ ]; let redirects = { diff --git a/src/assets/javascripts/helpers/twitter.js b/src/assets/javascripts/helpers/twitter.js index 7dbdfcf9..6a283869 100644 --- a/src/assets/javascripts/helpers/twitter.js +++ b/src/assets/javascripts/helpers/twitter.js @@ -3,10 +3,10 @@ window.browser = window.browser || window.chrome; import commonHelper from './common.js' const targets = [ - /^https?:\/\/(www\.|mobile\.|)twitter\.com/, - /^https?:\/\/(pbs\.|video\.|)twimg\.com/, - /^https?:\/\/platform\.twitter\.com\/embed/, - /^https?:\/\/t\.co/ + /^https?:\/{2}(www\.|mobile\.|)twitter\.com/, + /^https?:\/{2}(pbs\.|video\.|)twimg\.com/, + /^https?:\/{2}platform\.twitter\.com\/embed/, + /^https?:\/{2}t\.co/ ]; let redirects = { diff --git a/src/assets/javascripts/helpers/wikipedia.js b/src/assets/javascripts/helpers/wikipedia.js index a2e9cab3..da713a03 100644 --- a/src/assets/javascripts/helpers/wikipedia.js +++ b/src/assets/javascripts/helpers/wikipedia.js @@ -2,7 +2,7 @@ window.browser = window.browser || window.chrome; import commonHelper from './common.js' -const targets = /^https?:\/\/(.*\.|)wikipedia\.org/ +const targets = /^https?:\/{2}(.*\.|)wikipedia\.org/ let redirects = { "wikiless": { diff --git a/src/assets/javascripts/helpers/youtube/youtube.js b/src/assets/javascripts/helpers/youtube/youtube.js index eb91ab08..8f1ff3f5 100644 --- a/src/assets/javascripts/helpers/youtube/youtube.js +++ b/src/assets/javascripts/helpers/youtube/youtube.js @@ -70,16 +70,16 @@ import { } from './options.js'; const targets = [ - /^https?:\/\/(www\.|music\.|m\.|)youtube\.com(\/.*|$)/, + /^https?:\/{2}(www\.|music\.|m\.|)youtube\.com(\/.*|$)/, - /^https?:\/\/img\.youtube\.com\/vi\/.*\/..*/, // https://stackoverflow.com/questions/2068344/how-do-i-get-a-youtube-video-thumbnail-from-the-youtube-api - /^https?:\/\/(i|s)\.ytimg\.com\/vi\/.*\/..*/, + /^https?:\/{2}img\.youtube\.com\/vi\/.*\/..*/, // https://stackoverflow.com/questions/2068344/how-do-i-get-a-youtube-video-thumbnail-from-the-youtube-api + /^https?:\/{2}(i|s)\.ytimg\.com\/vi\/.*\/..*/, - /^https?:\/\/(www\.|music\.|)youtube\.com\/watch\?v\=..*/, + /^https?:\/{2}(www\.|music\.|)youtube\.com\/watch\?v\=..*/, - /^https?:\/\/youtu\.be\/..*/, + /^https?:\/{2}youtu\.be\/..*/, - /^https?:\/\/(www\.|)(youtube|youtube-nocookie)\.com\/embed\/..*/, + /^https?:\/{2}(www\.|)(youtube|youtube-nocookie)\.com\/embed\/..*/, ]; let redirects = { "invidious": { @@ -383,7 +383,7 @@ function redirect(url, details, initiator) { if (url.pathname.match(/iframe_api/) || url.pathname.match(/www-widgetapi/)) return null; // Don't redirect YouTube Player API. if (frontend == 'yatte' && details.type === "main_frame") - return url.href.replace(/^https?:\/\//, 'yattee://'); + return url.href.replace(/^https?:\/{2}/, 'yattee://'); else if (frontend == 'freetube' && details.type === "main_frame") return `freetube://${url}`; diff --git a/src/assets/javascripts/helpers/youtubeMusic.js b/src/assets/javascripts/helpers/youtubeMusic.js index b3f232c8..df713aae 100644 --- a/src/assets/javascripts/helpers/youtubeMusic.js +++ b/src/assets/javascripts/helpers/youtubeMusic.js @@ -5,7 +5,7 @@ import commonHelper from './common.js' window.browser = window.browser || window.chrome; const targets = [ - /^https?:\/\/music\.youtube\.com(\/.*|$)/, + /^https?:\/{2}music\.youtube\.com(\/.*|$)/, ]; let redirects = { "beatbump": { -- cgit 1.4.1