about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorHygna <hygna@proton.me>2022-10-03 06:44:49 +0100
committerHygna <hygna@proton.me>2022-10-03 06:44:49 +0100
commitc1af086c2756f401d8403b259e29f1354c5e001f (patch)
treed1bc11a485199bc80314ea7719af75dfac0529d6 /src
parentCorrected minor mistake (diff)
downloadlibredirect-c1af086c2756f401d8403b259e29f1354c5e001f.zip
Finished options upgrading
Diffstat (limited to 'src')
-rw-r--r--src/_locales/filter.py8
-rw-r--r--src/assets/images/sendFiles-icon.svg (renamed from src/assets/images/uploadFiles-icon.svg)0
-rw-r--r--src/assets/javascripts/services.js277
-rw-r--r--src/assets/javascripts/utils.js8
-rw-r--r--src/config/config.json5
-rw-r--r--src/instances/get_instances.py1
-rw-r--r--src/pages/options/index.html17
-rw-r--r--src/pages/options/widgets/general.js25
-rw-r--r--src/pages/popup/popup.html12
-rw-r--r--src/pages/popup/popup.js6
10 files changed, 187 insertions, 172 deletions
diff --git a/src/_locales/filter.py b/src/_locales/filter.py
index 581bb36c..0d5fb44d 100644
--- a/src/_locales/filter.py
+++ b/src/_locales/filter.py
@@ -1,12 +1,4 @@
-import requests
 import json
-from urllib.parse import urlparse
-from bs4 import BeautifulSoup
-import re
-from colorama import Fore, Back, Style
-from urllib.parse import urlparse
-import socket
-import subprocess
 
 
 ar_json = {}
diff --git a/src/assets/images/uploadFiles-icon.svg b/src/assets/images/sendFiles-icon.svg
index 5557664e..5557664e 100644
--- a/src/assets/images/uploadFiles-icon.svg
+++ b/src/assets/images/sendFiles-icon.svg
diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js
index 279c8c21..59316dfc 100644
--- a/src/assets/javascripts/services.js
+++ b/src/assets/javascripts/services.js
@@ -406,123 +406,115 @@ function computeService(url, returnFrontend) {
 							}

 						}

 					}

-					// if (returnFrontend) return [null, null]

-					// else return null

+					resolve()

 				})

 			})

 	})

 }

 

-async function switchInstance(url) {

-	fetch("/config/config.json")

-		.then(response => response.text())

-		.then(configData => {

-			const config = JSON.parse(configData)

-			browser.storage.local.get(["redirects", "options"], r => {

-				const redirects = r.redirects

-				const options = r.options

-				const protocolHost = utils.protocolHost(url)

-				for (const service in config.services) {

-					if (!options[service].enabled) continue

-					if (!all(service, null, options, config, redirects).includes(protocolHost)) continue

-

-					let instancesList = [...options[options[service].frontend][options.network].enabled, ...options[options[service].frontend][options.network].custom]

-					if (instancesList.length === 0 && options.networkFallback) instancesList = [...options[options[service].frontend].clearnet.enabled, ...options[options[service].frontend].clearnet.custom]

-

-					let oldInstance

-					const i = instancesList.indexOf(protocolHost)

-					if (i > -1) {

-						oldInstance = instancesList[i]

-						instancesList.splice(i, 1)

-					}

-					if (instancesList.length === 0) return

-					const randomInstance = utils.getRandomInstance(instancesList)

-					const oldUrl = `${oldInstance}${url.pathname}${url.search}`

-					// This is to make instance switching work when the instance depends on the pathname, eg https://darmarit.org/searx

-					// Doesn't work because of .includes array method, not a top priotiry atm

-					return oldUrl.replace(oldInstance, randomInstance)

-				}

-			})

-		})

+function switchInstance(url) {

+	return new Promise(async resolve => {

+		await init()

+		const protocolHost = utils.protocolHost(url)

+		for (const service in config.services) {

+			if (!all(service, null, options, config, redirects).includes(protocolHost)) continue

+

+			let instancesList = [...options[options[service].frontend][options.network].enabled, ...options[options[service].frontend][options.network].custom]

+			if (instancesList.length === 0 && options.networkFallback) instancesList = [...options[options[service].frontend].clearnet.enabled, ...options[options[service].frontend].clearnet.custom]

+

+			let oldInstance

+			const i = instancesList.indexOf(protocolHost)

+			if (i > -1) {

+				oldInstance = instancesList[i]

+				instancesList.splice(i, 1)

+			}

+			if (instancesList.length === 0) {

+				resolve()

+				return

+			}

+			const randomInstance = utils.getRandomInstance(instancesList)

+			const oldUrl = `${oldInstance}${url.pathname}${url.search}`

+			// This is to make instance switching work when the instance depends on the pathname, eg https://darmarit.org/searx

+			// Doesn't work because of .includes array method, not a top priotiry atm

+			resolve(oldUrl.replace(oldInstance, randomInstance))

+			return

+		}

+		resolve()

+	})

 }

 

-async function reverse(url) {

-	fetch("/config/config.json")

-		.then(response => response.text())

-		.then(configData => {

-			const config = JSON.parse(configData)

-			browser.storage.local.get(["redirects", "options"], r => {

-				const redirects = r.redirects

-				const options = r.options

-				let protocolHost = utils.protocolHost(url)

-				for (const service in config.services) {

-					if (!all(service, null, options, config, redirects).includes(protocolHost)) continue

-

-					switch (service) {

-						case "instagram":

-							if (url.pathname.startsWith("/p")) return `https://instagram.com${url.pathname.replace("/p", "")}${url.search}`

-							if (url.pathname.startsWith("/u")) return `https://instagram.com${url.pathname.replace("/u", "")}${url.search}`

-							return config.services[service].url + url.pathname + url.search

-						case "youtube":

-						case "imdb":

-						case "imgur":

-						case "tiktok":

-						case "twitter":

-						case "reddit":

-							return config.services[service].url + url.pathname + url.search

-						default:

-							return

-					}

-				}

-			})

-		})

+function reverse(url) {

+	return new Promise(async resolve => {

+		await init()

+		let protocolHost = utils.protocolHost(url)

+		for (const service in config.services) {

+			if (!all(service, null, options, config, redirects).includes(protocolHost)) continue

+

+			switch (service) {

+				case "instagram":

+					if (url.pathname.startsWith("/p")) resolve(`https://instagram.com${url.pathname.replace("/p", "")}${url.search}`)

+					if (url.pathname.startsWith("/u")) resolve(`https://instagram.com${url.pathname.replace("/u", "")}${url.search}`)

+					resolve(config.services[service].url + url.pathname + url.search)

+					return

+				case "youtube":

+				case "imdb":

+				case "imgur":

+				case "tiktok":

+				case "twitter":

+				case "reddit":

+					resolve(config.services[service].url + url.pathname + url.search)

+					return

+				default:

+					resolve()

+					return

+			}

+		}

+		resolve()

+	})

 }

 

-async function unifyPreferences(url, tabId) {

-	fetch("/config/config.json")

-		.then(response => response.text())

-		.then(configData => {

-			const config = JSON.parse(configData)

-			browser.storage.local.get(["options", "reidrects"], r => {

-				const redirects = r.redirects

-				const options = r.options

-				const protocolHost = utils.protocolHost(url)

-				for (const service in config.services) {

-					for (const frontend in config.services[service].frontends) {

-						if (all(service, frontend, options, config, redirects).includes(protocolHost)) {

-							let instancesList = [...options[frontend][options.network].enabled, ...options[frontend][options.network].custom]

-							if (options.networkFallback && options.network != "clearnet") instancesList.push(...options[frontend].clearnet.enabled, ...options[frontend].clearnet.custom)

-

-							const frontend = config.services[service].frontends[frontend]

-							if ("cookies" in frontend.preferences) {

-								for (const cookie of frontend.preferences.cookies) {

-									utils.copyCookie(frontend, url, instancesList, cookie)

-								}

-							}

-							if ("localstorage" in frontend.preferences) {

-								browser.storage.local.set({ tmp: [frontend, frontend.preferences.localstorage] })

-								browser.tabs.executeScript(tabId, {

-									file: "/assets/javascripts/get-localstorage.js",

+function unifyPreferences(url, tabId) {

+	return new Promise(async resolve => {

+		await init()

+		const protocolHost = utils.protocolHost(url)

+		for (const service in config.services) {

+			for (const frontend in config.services[service].frontends) {

+				if (all(service, frontend, options, config, redirects).includes(protocolHost)) {

+					let instancesList = [...options[frontend][options.network].enabled, ...options[frontend][options.network].custom]

+					if (options.networkFallback && options.network != "clearnet") instancesList.push(...options[frontend].clearnet.enabled, ...options[frontend].clearnet.custom)

+

+					const frontendObject = config.services[service].frontends[frontend]

+					if ("cookies" in frontendObject.preferences) {

+						for (const cookie of frontendObject.preferences.cookies) {

+							utils.copyCookie(frontendObject, url, instancesList, cookie)

+						}

+					}

+					if ("localstorage" in frontendObject.preferences) {

+						browser.storage.local.set({ tmp: [frontend, frontendObject.preferences.localstorage] })

+						browser.tabs.executeScript(tabId, {

+							file: "/assets/javascripts/get-localstorage.js",

+							runAt: "document_start",

+						})

+						for (const instance of instancesList)

+							browser.tabs.create({ url: instance }, tab =>

+								browser.tabs.executeScript(tab.id, {

+									file: "/assets/javascripts/set-localstorage.js",

 									runAt: "document_start",

 								})

-								for (const instance of instancesList)

-									browser.tabs.create({ url: instance }, tab =>

-										browser.tabs.executeScript(tab.id, {

-											file: "/assets/javascripts/set-localstorage.js",

-											runAt: "document_start",

-										})

-									)

-							}

-							if ("indexeddb" in frontend.preferences) {

-							}

-							if ("token" in frontend.preferences) {

-							}

-							return true

-						}

+							)

+					}

+					/*

+					if ("indexeddb" in frontendObject.preferences) {

 					}

+					if ("token" in frontendObject.preferences) {

+					}

+					*/

+					resolve(true)

+					return

 				}

-			})

-		})

+			}

+		}

+	})

 }

 

 async function setRedirects(redirects) {

@@ -612,46 +604,67 @@ function upgradeOptions() {
 		fetch("/config/config.json")

 			.then(response => response.text())

 			.then(configData => {

-				browser.storage.local.get(["options", "exceptions", "theme", "popupFrontends", "autoRedirect", "firstPartyIsolate"], r => {

+				browser.storage.local.get(null, r => {

 					let options = r.options

 					let latency = {}

 					const config = JSON.parse(configData)

 					options.exceptions = r.exceptions

 					if (r.theme != "DEFAULT") options.theme = r.theme

 					options.popupServices = r.popupFrontends

+					let tmp = options.popupServices.indexOf("tikTok")

+					if (tmp > -1) {

+						options.popupServices.splice(tmp, 1)

+						options.popupServices.push("tiktok")

+					}

+					tmp = options.popupServices.indexOf("sendTarget")

+					if (tmp > -1) {

+						options.popupServices.splice(tmp, 1)

+						options.popupServices.push("sendFiles")

+					}

 					options.firstPartyIsolate = r.firstPartyIsolate

 					options.autoRedirect = r.autoRedirect

+					switch (r.onlyEmbeddedVideo) {

+						case "onlyNotEmbedded":

+							options.youtube.redirectType = "main_frame"

+						case "onlyEmbedded":

+							options.youtube.redirectType = "sub_frame"

+						case "both":

+							options.youtube.redirectType = "both"

+					}

 					for (const service in config.services) {

-						browser.storage.local.get([`disable${utils.camelCase(service)}`, `${service}RedirectType`, `${service}Frontend`, `${service}Latency`, `${service}EmbedFrontend`], r => {

-							if (r) {

-								options[service].enabled = !r["disable" + utils.camelCase(service)]

-								if (r[service + "Frontend"]) {

-									if (r[service + "Frontend"] == "yatte") options[service].frontend = "yattee"

-									else options[service].frontend = r[service + "Frontend"]

-								}

-								if (r[service + "RedirectType"]) options[service].redirectType = r[service + "RedirectType"]

-								if (r[service + "EmbedFrontend"] && (service != "youtube" || r[service + "EmbedFrontend"] == "invidious" || "piped")) options[service].embedFrontend = r[service + "EmbedFrontend"]

-								for (const frontend in config.services[service].frontends) {

-									browser.local.storage.get(`${frontend}Latency`, r => {

-										if (r) latency[frontend] = r[frontend + "Latency"]

-										for (const network in config.networks) {

-											let protocol

-											if (network == "clearnet") protocol = "normal"

-											else protocol = network

-											browser.storage.local.get([`${frontend}${utils.camelCase(protocol)}RedirectsChecks`, `${frontend}${utils.camelCase(protocol)}CustomRedirects`], r => {

-												if (r) {

-													options[frontend][network].checks = r[frontend + utils.camelCase(protocol) + "RedirectsChecks"]

-													options[frontend][network].custom = r[frontend + utils.camelCase(protocol) + "CustomRedirects"]

-												}

-											})

-										}

-									})

+						let oldService

+						switch (service) {

+							case "tiktok":

+								oldService = "tikTok"

+								break

+							case "sendFiles":

+								oldService = "sendTarget"

+								break

+							default:

+								oldService = service

+						}

+						options[service].enabled = !r["disable" + utils.camelCase(oldService)]

+						if (r[oldService + "Frontend"]) {

+							if (r[oldService + "Frontend"] == "yatte") options[service].frontend = "yattee"

+							else options[service].frontend = r[oldService + "Frontend"]

+						}

+						if (r[oldService + "RedirectType"]) options[service].redirectType = r[oldService + "RedirectType"]

+						if (r[oldService + "EmbedFrontend"] && (service != "youtube" || r[oldService + "EmbedFrontend"] == "invidious" || r[oldService + "EmbedFrontend"] == "piped"))

+							options[service].embedFrontend = r[oldService + "EmbedFrontend"]

+						for (const frontend in config.services[service].frontends) {

+							if (r[frontend + "Latency"]) latency[frontend] = r[frontend + "Latency"]

+							for (const network in config.networks) {

+								let protocol

+								if (network == "clearnet") protocol = "normal"

+								else protocol = network

+								if (r[frontend + utils.camelCase(protocol) + "RedirectsChecks"]) {

+									options[frontend][network].enabled = r[frontend + utils.camelCase(protocol) + "RedirectsChecks"]

+									options[frontend][network].custom = r[frontend + utils.camelCase(protocol) + "CustomRedirects"]

 								}

 							}

-						})

+						}

 					}

-					browser.storage.local.set({ options, latency })

-					resolve()

+					browser.storage.local.set({ options, latency }, () => resolve())

 				})

 			})

 	})

diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js
index 26fe11d6..056bbc00 100644
--- a/src/assets/javascripts/utils.js
+++ b/src/assets/javascripts/utils.js
@@ -342,7 +342,7 @@ function getPreferencesFromToken(frontend, targetUrl, urls, name, endpoint) {
 	})
 }
 
-function copyRaw(test, copyRawElement, config) {
+function copyRaw(test, copyRawElement) {
 	return new Promise(resolve => {
 		browser.tabs.query({ active: true, currentWindow: true }, async tabs => {
 			let currTab = tabs[0]
@@ -355,7 +355,7 @@ function copyRaw(test, copyRawElement, config) {
 					return
 				}
 
-				let newUrl = servicesHelper.reverse(url, config)
+				const newUrl = await servicesHelper.reverse(url)
 
 				if (newUrl) {
 					resolve(newUrl)
@@ -387,9 +387,7 @@ function unify() {
 					return
 				}
 
-				const result = await servicesHelper.unifyPreferences(url, currTab.id)
-
-				resolve(result)
+				resolve(await servicesHelper.unifyPreferences(url, currTab.id))
 			}
 		})
 	})
diff --git a/src/config/config.json b/src/config/config.json
index b15c20d4..6866453c 100644
--- a/src/config/config.json
+++ b/src/config/config.json
@@ -22,7 +22,8 @@
 			"frontends": {

 				"invidious": {

 					"preferences": {

-						"cookies": ["PREFS"]

+						"cookies": ["PREFS"],

+						"localstorage": ["dark_mode"]

 					},

 					"name": "Invidious",

 					"embeddable": true,

@@ -529,7 +530,7 @@
 			"embeddable": false,

 			"url": "https://maps.libredirect.invalid"

 		},

-		"uploadFiles": {

+		"sendFiles": {

 			"frontends": {

 				"send": {

 					"name": "Send",

diff --git a/src/instances/get_instances.py b/src/instances/get_instances.py
index 06b547b3..9a53f927 100644
--- a/src/instances/get_instances.py
+++ b/src/instances/get_instances.py
@@ -431,6 +431,7 @@ def peertube():
 
 def isValid(url):  # This code is contributed by avanitrachhadiya2155
     try:
+        url.encode('ascii')
         result = urlparse(url)
         return all([result.scheme, result.netloc])
     except Exception:
diff --git a/src/pages/options/index.html b/src/pages/options/index.html
index 2549566c..5421bb81 100644
--- a/src/pages/options/index.html
+++ b/src/pages/options/index.html
@@ -84,7 +84,7 @@
   <path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"></path>
 </svg>
 
-    <a href="#uploadFiles" data-localise="__MSG_uploadFiles__">Send Files</a></div>
+    <a href="#sendFiles" data-localise="__MSG_sendFiles__">Send Files</a></div>
     <div class="title"><svg xmlns="http://www.w3.org/2000/svg" height="24" width="24" fill="currentColor">
   <path d="M11 17h2v-6h-2Zm1-8q.425 0 .713-.288Q13 8.425 13 8t-.287-.713Q12.425 7 12 7t-.712.287Q11 7.575 11 8t.288.712Q11.575 9 12 9Zm0 13q-2.075 0-3.9-.788-1.825-.787-3.175-2.137-1.35-1.35-2.137-3.175Q2 14.075 2 12t.788-3.9q.787-1.825 2.137-3.175 1.35-1.35 3.175-2.138Q9.925 2 12 2t3.9.787q1.825.788 3.175 2.138 1.35 1.35 2.137 3.175Q22 9.925 22 12t-.788 3.9q-.787 1.825-2.137 3.175-1.35 1.35-3.175 2.137Q14.075 22 12 22Zm0-2q3.35 0 5.675-2.325Q20 15.35 20 12q0-3.35-2.325-5.675Q15.35 4 12 4 8.65 4 6.325 6.325 4 8.65 4 12q0 3a.35 2.325 5.675Q8.65 20 12 20Zm0-8Z"></path>
 </svg>
@@ -150,11 +150,6 @@
       </button>
     </div>
   </form>
-  <div class="buttons buttons-inline"><a class="button button-inline" id="test">
-      <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
-        <path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"></path>
-      </svg>
-      Test Test Yes Yes</a>&nbsp; &nbsp;</div>
   <div class="checklist" id="exceptions-custom-checklist"></div>
   <div class="buttons buttons-inline"><a class="button button-inline" id="update-instances">
       <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
@@ -323,9 +318,9 @@
   <path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"></path>
 </svg>
 
-    <x data-localise="__MSG_uploadFiles__">Send Files</x>
+    <x data-localise="__MSG_sendFiles__">Send Files</x>
       </div>
-      <input id="uploadFiles" type="checkbox">
+      <input id="sendFiles" type="checkbox">
     </div>
     
 </div>
@@ -3139,14 +3134,14 @@
   </div>
         
 </section>
-<section class="option-block" id="uploadFiles_page">
+<section class="option-block" id="sendFiles_page">
   <div class="some-block option-block">
-    <h1 data-localise="__MSG_uploadFiles__">Send Files</h1>
+    <h1 data-localise="__MSG_sendFiles__">Send Files</h1>
   </div>
   <hr>
   <div class="some-block option-block">
     <h4 data-localise="__MSG_enable__">Enable</h4>
-    <input id="uploadFiles-enabled" type="checkbox">
+    <input id="sendFiles-enabled" type="checkbox">
   </div>
       <hr>
       <div id="send">
diff --git a/src/pages/options/widgets/general.js b/src/pages/options/widgets/general.js
index 1a2f44c6..92632f23 100644
--- a/src/pages/options/widgets/general.js
+++ b/src/pages/options/widgets/general.js
@@ -49,16 +49,16 @@ function setOption(option, multiChoice, event) {
 let exportSettingsElement = document.getElementById("export-settings")
 
 function exportSettings() {
-	browser.storage.local.get(null, result => {
-		let resultString = JSON.stringify(result, null, "  ")
-		exportSettingsElement.href = "data:application/json;base64," + btoa(encodeURI(resultString))
+	browser.storage.local.get("options", result => {
+		result.options.version = browser.runtime.getManifest().version
+		let resultString = JSON.stringify(result.options, null, "  ")
+		exportSettingsElement.href = "data:application/json;base64," + btoa(resultString)
 		exportSettingsElement.download = "libredirect-settings.json"
 	})
 }
 exportSettings()
 
 document.getElementById("general_page").addEventListener("click", exportSettings)
-document.getElementById("test").addEventListener("click", servicesHelper.upgradeOptions)
 
 let importSettingsElement = document.getElementById("import-settings")
 let importSettingsElementText = document.getElementById("import_settings_text")
@@ -70,7 +70,22 @@ importSettingsElement.addEventListener("change", () => {
 	reader.onload = async () => {
 		const data = JSON.parse(reader.result)
 		if ("theme" in data && "disableImgur" in data && "imgurRedirects" in data) {
-			browser.storage.local.clear(() => browser.storage.local.set({ ...data }, () => location.reload()))
+			browser.storage.local.clear(() =>
+				browser.storage.local.set({ ...data }, () => {
+					fetch("/instances/blacklist.json")
+						.then(response => response.text())
+						.then(async data => {
+							browser.storage.local.set({ blacklists: JSON.parse(data) }, async () => {
+								await generalHelper.initDefaults()
+								await servicesHelper.initDefaults()
+								await servicesHelper.upgradeOptions()
+								location.reload()
+							})
+						})
+				})
+			)
+		} else if ("version" in data) {
+			browser.storage.local.clear(() => browser.storage.local.set({ options: data }, () => location.reload()))
 		} else {
 			console.log("incompatible settings")
 			importError()
diff --git a/src/pages/popup/popup.html b/src/pages/popup/popup.html
index 56e4ca14..b5076635 100644
--- a/src/pages/popup/popup.html
+++ b/src/pages/popup/popup.html
@@ -107,13 +107,13 @@
     <h4 data-localise="__MSG_maps__">Maps</h4></a>
   <input class="maps-enabled" type="checkbox"/>
 </div>
-<div class="uploadFiles some-block"><a class="title" href="https://send.libredirect.invalid">
+<div class="sendFiles some-block"><a class="title" href="https://send.libredirect.invalid">
     <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
   <path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"></path>
 </svg>
 
-    <h4 data-localise="__MSG_uploadFiles__">Send Files</h4></a>
-  <input class="uploadFiles-enabled" type="checkbox"/>
+    <h4 data-localise="__MSG_sendFiles__">Send Files</h4></a>
+  <input class="sendFiles-enabled" type="checkbox"/>
 </div>
 
       <div id="current_site_divider">
@@ -220,13 +220,13 @@
     <h4 data-localise="__MSG_maps__">Maps</h4></a>
   <input class="maps-enabled" type="checkbox"/>
 </div>
-<div class="uploadFiles some-block"><a class="title" href="https://send.libredirect.invalid">
+<div class="sendFiles some-block"><a class="title" href="https://send.libredirect.invalid">
     <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
   <path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"></path>
 </svg>
 
-    <h4 data-localise="__MSG_uploadFiles__">Send Files</h4></a>
-  <input class="uploadFiles-enabled" type="checkbox"/>
+    <h4 data-localise="__MSG_sendFiles__">Send Files</h4></a>
+  <input class="sendFiles-enabled" type="checkbox"/>
 </div>
 
     </div>
diff --git a/src/pages/popup/popup.js b/src/pages/popup/popup.js
index 05dd70f7..ed1546c7 100644
--- a/src/pages/popup/popup.js
+++ b/src/pages/popup/popup.js
@@ -26,7 +26,7 @@ utils.switchInstance(true).then(r => {
 	else document.getElementById("change_instance").addEventListener("click", () => utils.switchInstance(false))
 })
 
-utils.copyRaw(true, null, config).then(r => {
+utils.copyRaw(true).then(r => {
 	if (!r) document.getElementById("copy_raw_div").style.display = "none"
 	else {
 		const copy_raw = document.getElementById("copy_raw")
@@ -81,13 +81,13 @@ browser.storage.local.get("options", r => {
 		let service = await serviceHelper.computeService(url, true)
 		let frontend
 		if (service) {
-			if (service[1]) {
+			if (service[0]) {
 				frontend = service[1]
 				service = service[0]
 			}
 			divs[service].current.classList.remove("hide")
 			divs[service].all.classList.add("hide")
-			if (config.services[service].frontends[frontend].preferences && !config.services[service].frontends[frontend].preferences.token) {
+			if (frontend && config.services[service].frontends[frontend].preferences && !config.services[service].frontends[frontend].preferences.token) {
 				const unify = document.getElementById("unify")
 				const textElement = document.getElementById("unify").getElementsByTagName("h4")[0]
 				unify.addEventListener("click", () => {