aboutsummaryrefslogtreecommitdiffstats
path: root/src/assets
diff options
context:
space:
mode:
authorManeraKai <manerakai@protonmail.com>2024-03-14 12:49:48 +0300
committerManeraKai <manerakai@protonmail.com>2024-03-14 12:49:48 +0300
commit498801763ffa21d89d0276c4d1a1270986a93839 (patch)
treeae5bcd29ac0ca61fda9e50d4d41e0ce2e6efc887 /src/assets
parent2.8.2 => 2.8.3 (diff)
parentCleaned code (diff)
downloadlibredirect-498801763ffa21d89d0276c4d1a1270986a93839.zip
Merge branch '1fexd-refactor-redirect'
Diffstat (limited to 'src/assets')
-rw-r--r--src/assets/javascripts/services.js118
1 files changed, 62 insertions, 56 deletions
diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js
index 1a9c3f29..8bbc6de4 100644
--- a/src/assets/javascripts/services.js
+++ b/src/assets/javascripts/services.js
@@ -62,68 +62,21 @@ async function redirectAsync(url, type, initiator, forceRedirection) {
}
/**
- * @param {URL} url
- * @param {string} type
- * @param {URL} initiator
- * @param {boolean} forceRedirection
- * @returns {string | undefined}
+ * @param url
+ * @param frontend
+ * @param randomInstance
+ * @returns {undefined|string}
*/
-function redirect(url, type, initiator, forceRedirection, incognito) {
- if (type != "main_frame" && type != "sub_frame" && type != "image") return
- let randomInstance
- let frontend
- if (!forceRedirection && options.redirectOnlyInIncognito == true && !incognito) return
- for (const service in config.services) {
- if (!forceRedirection && !options[service].enabled) continue
-
- frontend = options[service].frontend
-
-
- if (config.services[service].frontends[frontend].desktopApp && type != "main_frame" && options[service].redirectType != "main_frame")
- frontend = options[service].embedFrontend
-
-
- if (!regexArray(service, url, config, frontend)) {
- frontend = null
- continue
- }
-
- if (
- config.services[service].embeddable &&
- type != options[service].redirectType && options[service].redirectType != "both"
- ) {
- if (options[service].unsupportedUrls == 'block') return 'CANCEL'
- return
- }
-
- let instanceList = options[frontend]
- if (instanceList === undefined) break
- if (instanceList.length === 0) return null
-
- if (
- initiator
- &&
- instanceList.includes(initiator.origin)
- ) {
- if (type != "main_frame") return null
- else return "BYPASSTAB"
- }
-
- randomInstance = utils.getRandomInstance(instanceList)
- if (config.services[service].frontends[frontend].localhost && options[service].instance == "localhost") {
- randomInstance = `http://${frontend}.localhost:8080`
- }
- break
- }
- if (!frontend) return
-
+function rewrite(url, frontend, randomInstance) {
+ if (!frontend || !randomInstance) return
switch (frontend) {
case "hyperpipe": {
return `${randomInstance}${url.pathname}${url.search}`.replace(/\/search\?q=.*/, searchQuery => searchQuery.replace("?q=", "/"))
}
case "searx":
- case "searxng":
+ case "searxng": {
return `${randomInstance}/${url.search}`
+ }
case "whoogle": {
return `${randomInstance}/search${url.search}`
}
@@ -149,7 +102,6 @@ function redirect(url, type, initiator, forceRedirection, incognito) {
case "freetubePwa": {
return 'freetube://' + url.href
}
-
case "poketube": {
if (url.pathname.startsWith('/channel')) {
const reg = /\/channel\/(.*)\/?$/.exec(url.pathname)
@@ -559,6 +511,60 @@ function redirect(url, type, initiator, forceRedirection, incognito) {
/**
* @param {URL} url
+ * @param {string} type
+ * @param {URL} initiator
+ * @param {boolean} forceRedirection
+ * @returns {string | undefined}
+ */
+function redirect(url, type, initiator, forceRedirection, incognito) {
+ if (type != "main_frame" && type != "sub_frame" && type != "image") return
+ let randomInstance
+ let frontend
+ if (!forceRedirection && options.redirectOnlyInIncognito == true && !incognito) return
+ for (const service in config.services) {
+ if (!forceRedirection && !options[service].enabled) continue
+
+ frontend = options[service].frontend
+
+ if (config.services[service].frontends[frontend].desktopApp && type != "main_frame" && options[service].redirectType != "main_frame")
+ frontend = options[service].embedFrontend
+
+ if (!regexArray(service, url, config, frontend)) {
+ frontend = null
+ continue
+ }
+
+ if (
+ config.services[service].embeddable
+ &&
+ type != options[service].redirectType && options[service].redirectType != "both"
+ ) {
+ if (options[service].unsupportedUrls == 'block') return 'CANCEL'
+ return
+ }
+
+ let instanceList = options[frontend]
+ if (instanceList === undefined) break
+ if (instanceList.length === 0) return null
+
+ if (initiator && instanceList.includes(initiator.origin)) {
+ if (type != "main_frame") return null
+ else return "BYPASSTAB"
+ }
+
+ randomInstance = utils.getRandomInstance(instanceList)
+ if (config.services[service].frontends[frontend].localhost && options[service].instance == "localhost") {
+ randomInstance = `http://${frontend}.localhost:8080`
+ }
+ break
+ }
+ if (!frontend) return
+
+ return rewrite(url, frontend, randomInstance)
+}
+
+/**
+ * @param {URL} url
* @param {*} returnFrontend
*/
function computeService(url, returnFrontend) {