From 97d390737e7e953fe1e6559e41963c547b31afa0 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Thu, 29 Aug 2024 13:36:21 +0300 Subject: Improving popup messages --- src/pages/messages_src/App.svelte | 132 ++++++++++++++++++++++++++++++++++++++ src/pages/messages_src/main.js | 7 ++ src/pages/messages_src/stores.js | 5 ++ 3 files changed, 144 insertions(+) create mode 100644 src/pages/messages_src/App.svelte create mode 100644 src/pages/messages_src/main.js create mode 100644 src/pages/messages_src/stores.js (limited to 'src/pages/messages_src') diff --git a/src/pages/messages_src/App.svelte b/src/pages/messages_src/App.svelte new file mode 100644 index 00000000..b08a143b --- /dev/null +++ b/src/pages/messages_src/App.svelte @@ -0,0 +1,132 @@ + + +{#if _options && _config} +
+ {#if window.location.search.includes("message=disabled")} +
+

You disabled redirections for this service

+ +
+ {:else if window.location.search.includes("message=no_instance")} +
+

You have no instance selected for this frontend

+ +
+ {/if} +
+{:else} +

Loading...

+{/if} + + diff --git a/src/pages/messages_src/main.js b/src/pages/messages_src/main.js new file mode 100644 index 00000000..c4012f4a --- /dev/null +++ b/src/pages/messages_src/main.js @@ -0,0 +1,7 @@ +import App from "./App.svelte" + +const app = new App({ + target: document.body, +}) + +export default app diff --git a/src/pages/messages_src/stores.js b/src/pages/messages_src/stores.js new file mode 100644 index 00000000..782f6064 --- /dev/null +++ b/src/pages/messages_src/stores.js @@ -0,0 +1,5 @@ +import { writable } from "svelte/store" + +export const options = writable(null) +export const config = writable(null) +export const page = writable("general") -- cgit 1.4.1 From 1492345b0d2f0f4d6d4a7a6f8814596785a472b0 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Thu, 29 Aug 2024 15:29:51 +0300 Subject: Added message popup for Server Errors https://github.com/libredirect/browser_extension/issues/936 --- src/assets/javascripts/services.js | 10 ++++++ src/pages/background/background.js | 34 +++++++++++++------- src/pages/messages_src/App.svelte | 65 +++++++++++++++++++++++++++++++++++++- 3 files changed, 97 insertions(+), 12 deletions(-) (limited to 'src/pages/messages_src') diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index d1c12375..243f0598 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -667,6 +667,15 @@ function computeService(url) { resolve() }) } +export function computeFrontend(url) { + for (const service in config.services) { + for (const frontend in config.services[service].frontends) { + if (all(service, frontend, options, config).includes(utils.protocolHost(url))) { + return {service, frontend} + } + } + } +} /** * @param {URL} url @@ -975,4 +984,5 @@ export default { copyRaw, switchInstance, isException, + computeFrontend, } diff --git a/src/pages/background/background.js b/src/pages/background/background.js index db7ad087..2bb6cb57 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -58,7 +58,7 @@ browser.webRequest.onBeforeRequest.addListener( return null } - const newUrl = servicesHelper.redirect( + let newUrl = servicesHelper.redirect( url, details.type, originUrl, @@ -72,20 +72,16 @@ browser.webRequest.onBeforeRequest.addListener( const frontend = url.searchParams.get("frontend") const oldUrl = new URL(url.searchParams.get("url")) - browser.tabs.update({ - url: browser.runtime.getURL( - `/pages/messages/index.html?message=no_instance&url=${encodeURIComponent(oldUrl)}&frontend=${encodeURIComponent(frontend)}` - ), - }) + newUrl = browser.runtime.getURL( + `/pages/messages/index.html?message=no_instance&url=${encodeURIComponent(oldUrl)}&frontend=${encodeURIComponent(frontend)}` + ) } if (!newUrl) { if (url.href.match(/^https?:\/{2}(.*\.)?libredirect\.invalid.*/)) { - browser.tabs.update({ - url: browser.runtime.getURL( - `/pages/messages/index.html?message=disabled&url=${encodeURIComponent(url.href)}` - ), - }) + newUrl = browser.runtime.getURL( + `/pages/messages/index.html?message=disabled&url=${encodeURIComponent(url.href)}` + ) } } @@ -108,6 +104,22 @@ browser.webRequest.onBeforeRequest.addListener( ["blocking"] ) +browser.webRequest.onHeadersReceived.addListener( + details => { + if (details.statusCode >= 501 || details.statusCode == 429 || details.statusCode == 403) { + const url = new URL(details.url) + const { service, frontend } = servicesHelper.computeFrontend(url) + if (!service) return + browser.tabs.update({ + url: browser.runtime.getURL( + `/pages/messages/index.html?message=server_error&code=${details.statusCode}=&url=${encodeURIComponent(url.href)}&frontend=${encodeURIComponent(frontend)}&service=${encodeURIComponent(service)}` + ), + }) + } + }, + { urls: [""] } +) + browser.tabs.onRemoved.addListener(tabId => { if (tabIdRedirects[tabId] != undefined) { delete tabIdRedirects[tabId] diff --git a/src/pages/messages_src/App.svelte b/src/pages/messages_src/App.svelte index b08a143b..05a78044 100644 --- a/src/pages/messages_src/App.svelte +++ b/src/pages/messages_src/App.svelte @@ -9,6 +9,7 @@ import { options, config, page } from "./stores" import Button from "../components/Button.svelte" import AutoPickIcon from "../icons/AutoPickIcon.svelte" + import SwitchInstanceIcon from "../icons/SwitchInstanceIcon.svelte" let _options const unsubscribeOptions = options.subscribe(val => { @@ -49,7 +50,7 @@ const params = new URLSearchParams(window.location.search) const oldUrl = new URL(params.get("url")) - async function autoPickInstance() { + async function autoPick() { const frontend = params.get("frontend") autoPicking = true const instances = utils.randomInstances(redirects[frontend]["clearnet"], 5) @@ -59,6 +60,10 @@ _options[frontend].push(pings[0][0]) options.set(_options) autoPicking = false + } + + async function autoPickInstance() { + await autoPick() await redirectUrl() } @@ -73,6 +78,36 @@ const newUrl = await servicesHelper.redirectAsync(oldUrl, "main_frame", null, null, false, true) browser.tabs.update({ url: newUrl }) } + + async function switchInstance() { + const newUrl = await servicesHelper.switchInstance(oldUrl) + browser.tabs.update({ url: newUrl }) + } + + async function removeInstance() { + const frontend = params.get("frontend") + const i = _options[frontend].indexOf(utils.protocolHost(oldUrl)) + _options[frontend].splice(i, 1) + options.set(_options) + const newUrl = await servicesHelper.switchInstance(oldUrl, service) + browser.tabs.update({ url: newUrl }) + } + + async function removeAndAutoPickInstance() { + const frontend = params.get("frontend") + const i = _options[frontend].indexOf(utils.protocolHost(oldUrl)) + _options[frontend].splice(i, 1) + options.set(_options) + await autoPick() + const newUrl = await servicesHelper.switchInstance(oldUrl, service) + browser.tabs.update({ url: newUrl }) + } + + async function addAutoPickInstance() { + await autoPick() + const newUrl = await servicesHelper.switchInstance(oldUrl) + browser.tabs.update({ url: newUrl }) + } {#if _options && _config} @@ -84,6 +119,34 @@ {browser.i18n.getMessage("enable") || "Enable"} + {:else if window.location.search.includes("message=server_error")} + +
+

Your selected instance gave out an error

+ {#if _options[params.get("frontend")].length > 1} + + + {:else} + + + {/if} +
{:else if window.location.search.includes("message=no_instance")}

You have no instance selected for this frontend

-- cgit 1.4.1 From 79e134a1873e6897107b1f2acb4437030cea2425 Mon Sep 17 00:00:00 2001 From: ManeraKai Date: Sat, 31 Aug 2024 11:47:11 +0300 Subject: small UI improvements --- src/pages/background/background.js | 29 +++++++++++++++++--------- src/pages/messages_src/App.svelte | 8 +++---- src/pages/options_src/Services/Services.svelte | 2 ++ 3 files changed, 25 insertions(+), 14 deletions(-) (limited to 'src/pages/messages_src') diff --git a/src/pages/background/background.js b/src/pages/background/background.js index 2bb6cb57..0d558b01 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -71,17 +71,21 @@ browser.webRequest.onBeforeRequest.addListener( const url = new URL(newUrl) const frontend = url.searchParams.get("frontend") const oldUrl = new URL(url.searchParams.get("url")) - - newUrl = browser.runtime.getURL( - `/pages/messages/index.html?message=no_instance&url=${encodeURIComponent(oldUrl)}&frontend=${encodeURIComponent(frontend)}` - ) + const params = new URLSearchParams({ + message: "no_instance", + url: oldUrl, + frontend: frontend, + }) + newUrl = browser.runtime.getURL(`/pages/messages/index.html?${params.toString()}`) } if (!newUrl) { if (url.href.match(/^https?:\/{2}(.*\.)?libredirect\.invalid.*/)) { - newUrl = browser.runtime.getURL( - `/pages/messages/index.html?message=disabled&url=${encodeURIComponent(url.href)}` - ) + const params = new URLSearchParams({ + message: "disabled", + url: url.href, + }) + newUrl = browser.runtime.getURL(`/pages/messages/index.html?${params.toString()}`) } } @@ -110,10 +114,15 @@ browser.webRequest.onHeadersReceived.addListener( const url = new URL(details.url) const { service, frontend } = servicesHelper.computeFrontend(url) if (!service) return + const params = new URLSearchParams({ + message: "server_error", + code: details.statusCode, + url: url.href, + frontend: frontend, + service: service, + }) browser.tabs.update({ - url: browser.runtime.getURL( - `/pages/messages/index.html?message=server_error&code=${details.statusCode}=&url=${encodeURIComponent(url.href)}&frontend=${encodeURIComponent(frontend)}&service=${encodeURIComponent(service)}` - ), + url: browser.runtime.getURL(`/pages/messages/index.html?${params.toString()}`), }) } }, diff --git a/src/pages/messages_src/App.svelte b/src/pages/messages_src/App.svelte index 05a78044..6d68ff5f 100644 --- a/src/pages/messages_src/App.svelte +++ b/src/pages/messages_src/App.svelte @@ -112,17 +112,17 @@ {#if _options && _config}
- {#if window.location.search.includes("message=disabled")} + {#if params.get("message") == "disabled"}

You disabled redirections for this service

- {:else if window.location.search.includes("message=server_error")} + {:else if params.get("message") == "server_error"}
-

Your selected instance gave out an error

+

Your selected instance gave out an error: {params.get("code")}

{#if _options[params.get("frontend")].length > 1} {/if}
- {:else if window.location.search.includes("message=no_instance")} + {:else if params.get("message") == "no_instance"}

You have no instance selected for this frontend