From b379e5ba07689d02b6f07bcd7bceff6d76ef3551 Mon Sep 17 00:00:00 2001 From: "kai.t" Date: Mon, 13 May 2024 18:16:32 +0700 Subject: [PATCH] add storage extension --- popup.html | 10 +-- scripts/background.js | 146 +++++++++++++++++++++++++++++------------- 2 files changed, 106 insertions(+), 50 deletions(-) diff --git a/popup.html b/popup.html index fb1e535..b90b89e 100644 --- a/popup.html +++ b/popup.html @@ -1,5 +1,7 @@ -
+ + + +
+

Extension: set proxy by socket!

- diff --git a/scripts/background.js b/scripts/background.js index 6bc8795..2b382c8 100644 --- a/scripts/background.js +++ b/scripts/background.js @@ -6,31 +6,117 @@ const credential = { password: "", }; +const colors = { + Green: [0, 128, 0, 255], + Red: [255, 0, 0, 255], + Orange: [255, 165, 0, 255], +}; + +function setProxy(proxy) { + const requestProxy = { + type: proxy.type, + host: proxy.host, + port: proxy.port, + proxyDNS: ["socks", "socks4"].includes(proxy.type), + }; + + // delete sendAuth old + if (typeof sendAuth === "function") { + browser.webRequest.onAuthRequired.removeListener(sendAuth); + } + + if (requestProxy.username) { + requestProxy.username = credential.username = proxy.username; + requestProxy.password = credential.password = proxy.password; + sendAuth = async () => { + return { + authCredentials: credential, + }; + }; + browser.webRequest.onAuthRequired.addListener( + sendAuth, + {urls: [""]}, + ["blocking"] + ); + } + + // final handle + browser.proxy.onRequest.addListener( + (requestInfo) => { + return requestProxy; + }, + {urls: [""]} + ); +} + +function setStorage(proxy) { + chrome.storage.sync.set({proxy: proxy}, function () { + console.log("Settings saved"); + }); +} + +async function getStorage() { + const promise = new Promise((res, rej) => { + chrome.storage.sync.get(["proxy"], function (values) { + res(values); + }); + }); + return promise; +} + +function switchBadge(first, second) { + chrome.browserAction.getBadgeText({}, function (color) { + if (color === first) { + browser.browserAction.setBadgeText({text: second}); + } else { + browser.browserAction.setBadgeText({text: first}); + } + }); +} + +function intervalSetProxy(interval = 10000) { + if (!interval) { + interval = 10000; + } + + if (typeof _intervalSetProxy === "number") { + clearInterval(_intervalSetProxy); + } + + var _intervalSetProxy = setInterval(() => { + getStorage().then((values) => { + if (values?.proxy) { + console.count(values?.proxy.password); + switchBadge('P1', 'P2'); + setProxy(values?.proxy); + } else { + clearInterval(_intervalSetProxy); + } + }); + }, interval); +} + document.addEventListener("DOMContentLoaded", function () { + browser.browserAction.setBadgeTextColor({color: "#fff"}); + const socket = io("https://seotool.nswteam.net"); socket.on("connect", function () { browser.browserAction.setBadgeText({text: "IO"}); - browser.browserAction.setBadgeTextColor({color: "#fff"}); - browser.browserAction.setBadgeBackgroundColor({color: "green"}); + browser.browserAction.setBadgeBackgroundColor({color: colors.Green}); + intervalSetProxy(); console.log("socket.io connected"); }); socket.on("disconnect", function () { browser.browserAction.setBadgeText({text: "IO"}); - browser.browserAction.setBadgeTextColor({color: "#fff"}); - browser.browserAction.setBadgeBackgroundColor({color: "red"}); + browser.browserAction.setBadgeBackgroundColor({color: colors.Red}); + console.log("socket.io disconnected"); }); socket.emit("join", {join: "set_proxy"}); + // TODO get message set proxy socket.on("message", function (message) { - console.log({message}); - chrome.runtime.sendMessage({ - to: "content", - data: { - socket_message: message, - }, - }); /** * { * browser_name: ... @@ -42,40 +128,8 @@ document.addEventListener("DOMContentLoaded", function () { * proxyDNS: ['socks', 'socks4'].includes(message.type) * } */ - const proxyDNS = ["socks", "socks4"].includes(message.type); - const proxy = { - type: message.type, - host: message.host, - port: message.port, - proxyDNS: proxyDNS, - }; - - // delete sendAuth old - if (typeof sendAuth === "function") { - browser.webRequest.onAuthRequired.removeListener(sendAuth); - } - - if (message.username) { - proxy.username = credential.username = message.username; - proxy.password = credential.password = message.password; - sendAuth = async () => { - return { - authCredentials: credential, - }; - }; - browser.webRequest.onAuthRequired.addListener( - sendAuth, - {urls: [""]}, - ["blocking"] - ); - } - - // final handle - browser.proxy.onRequest.addListener( - (requestInfo) => { - return proxy; - }, - {urls: [""]} - ); + console.log({message}); + setStorage(message); + intervalSetProxy(); }); }); // end ready