Move rewrite logic to own function

This commit is contained in:
Your Name 2024-03-12 16:27:18 +01:00
parent 787487764d
commit 1f8e0d00e1
1 changed files with 65 additions and 54 deletions

View File

@ -62,61 +62,13 @@ 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=", "/"))
@ -557,6 +509,65 @@ 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