/* Loaded into popup index.html */ let browserType = getBrowser(); // boilerplate to dedect browser type api function getBrowser() { if (typeof chrome !== "undefined") { if (typeof browser !== "undefined") { return browser; } else { return chrome; } } else { console.log("failed to dedect browser"); throw "browser detection error" }; } // store access details document.getElementById("save-login").addEventListener("click", function () { let url = document.getElementById("full-url").value; if (!url.includes('://')) { url = 'http://' + url; } let parsed = new URL(url); let toStore = { "access": { "url": `${parsed.protocol}//${parsed.hostname}`, "port": parsed.port || (parsed.protocol === 'https' ? '443' : '80'), "apiKey": document.getElementById("api-key").value } }; browserType.storage.local.set(toStore, function() { console.log("Stored connection details: " + JSON.stringify(toStore)); pingBackend(); }); }) // verify connection status document.getElementById("status-icon").addEventListener("click", function() { pingBackend(); }) // send cookie document.getElementById("sendCookies").addEventListener("click", function() { sendCookie(); }) function sendCookie() { console.log("popup send cookie"); function handleResponse(message) { console.log("handle cookie response: " + JSON.stringify(message)); let cookie_validated = message.cookie_validated; document.getElementById("sendCookiesStatus").innerText = "validated: " + cookie_validated } function handleError(error) { console.log(`Error: ${error}`); } let checked = document.getElementById("sendCookies").checked; let toStore = { "sendCookies": { "checked": checked } }; browserType.storage.local.set(toStore, function() { console.log("stored option: " + JSON.stringify(toStore)); }) if (checked === false) { return } let sending = browserType.runtime.sendMessage({"sendCookie": true}); sending.then(handleResponse, handleError); } // send ping message to TA backend function pingBackend() { function handleResponse(message) { if (message.response === "pong") { setStatusIcon(true); console.log("connection validated") } } function handleError(error) { console.log(`Error: ${error}`); setStatusIcon(false); } console.log("ping TA server") let sending = browserType.runtime.sendMessage({"verify": true}); sending.then(handleResponse, handleError); } // add url to image function addUrl(access) { const url = `${access.url}:${access.port}`; document.getElementById("ta-url").setAttribute("href", url); } function setCookieState() { function handleResponse(message) { console.log(message); document.getElementById("sendCookies").checked = message.cookie_enabled; if (message.validated_str) { document.getElementById("sendCookiesStatus").innerText = message.validated_str; } } function handleError(error) { console.log(`Error: ${error}`); } console.log("set cookie state"); let sending = browserType.runtime.sendMessage({"cookieState": true}); sending.then(handleResponse, handleError) document.getElementById("sendCookies").checked = true; } // change status icon based on connection status function setStatusIcon(connected) { let statusIcon = document.getElementById("status-icon") if (connected == true) { statusIcon.innerHTML = "☑"; statusIcon.style.color = "green"; } else { statusIcon.innerHTML = "☒"; statusIcon.style.color = "red"; } } // fill in form document.addEventListener("DOMContentLoaded", async () => { function onGot(item) { if (!item.access) { console.log("no access details found"); setStatusIcon(false); return } let { url, port } = item.access; let fullUrl = url; if (!(url.startsWith('http://') && port === '80')) { fullUrl += `:${port}`; } document.getElementById("full-url").value = fullUrl; document.getElementById("api-key").value = item.access.apiKey; pingBackend(); addUrl(item.access); }; function setCookiesOptions(result) { if (!result.sendCookies || result.sendCookies.checked === false) { console.log("sync cookies not set"); return } console.log("set options: " + JSON.stringify(result)); setCookieState(); } function onError(error) { console.log(`Error: ${error}`); }; browserType.storage.local.get("access", function(result) { onGot(result) }); browserType.storage.local.get("sendCookies", function(result) { setCookiesOptions(result) }) })