//Checks for dev mode function isPageDev() { if (localStorage.getItem("dev")) { return "dev" } else { return ""; } } function isButtonDev() { if (!localStorage.getItem("dev")) { return "unchecked" } else { return ""; } } //Set base page code document.documentElement.innerHTML = ` Ingot for iBoss
Error: This may have been patched
You are not on the correct page.
To use Ingot for iBoss click the button below to redirect click the \"Click me!\" button. Once on the blank page, click the bookmarklet again.
Redirect
` document.querySelector("#redirectbutton").addEventListener("click", () => { window.location.href='chrome-extension://kmffehbidlalibfeklaefnckpidbodff/restricted.html?re=1&bc=%3Cdiv%20style%3D%22%0A%20%20%20%20position%3A%20fixed%3B%0A%20%20%20%20height%3A%20100%25%3B%0A%20%20%20%20width%3A%20100%25%3B%0A%20%20%20%20top%3A%200%3B%0A%20%20%20%20bottom%3A%200%3B%0A%20%20%20%20left%3A%200%3B%0A%20%20%20%20right%3A%200%3B%0A%20%20%20%20margin%3A%20auto%3B%0A%20%20%20%20background-color%3A%20black%3B%0A%22%3E%3Ca%20href%3D%22about%3Ablank%22%20rel%3D%22opener%22%20style%3D%22font-size%3A%2023vmin%3Bposition%3A%20absolute%3Bheight%3A%20fit-content%3Bwidth%3A%20100%25%3Btop%3A%200%3Bbottom%3A%200%3Bleft%3A%200%3Bright%3A%200%3Bvertical-align%3A%20middle%3Btext-align%3A%20center%3Bmargin%3A%20auto%3B%22%20target%3D%22_blank%22%3EClick%20me%21%3C%2Fa%3E%3C%2Fdiv%3E' }); const devtoggle = document.querySelector("#toggle"); devtoggle.addEventListener("click", ev => { toggle(ev.currentTarget); devMode(); }); devtoggle.addEventListener("mousedown", ev => { togglePress(ev.currentTarget, 'down'); }); devtoggle.addEventListener("mouseup", ev => { togglePress(ev.currentTarget, 'up'); }); if (!chrome.management) { const framer = document.createElement("iframe"); framer.src = opener ? opener.location.href : (document.domain.includes(".") ? "https://" + document.domain : "chrome-extension://" + document.domain + "/restricted.html"); framer.style.display = "none"; document.body.appendChild(framer); if (frames[0]) { window.chrome = frames[0].window.chrome; } } //Remove extension function removeExtension(extensionId) { chrome.management.uninstall(extensionId) } //Simple function to make image to data url function blobToDataURL(blob) { return new Promise((resolve, reject) => { var reader = new FileReader(); reader.onload = function(e) { resolve(e.target.result) } reader.onerror = function(e) { reject(reader.error) } reader.onabort = function(e) { reject(new Error("Read aborted")) } reader.readAsDataURL(blob); }) } //Gets the icon from extensions async function getIconFromExtension(extensionID) { if (!extensionID) return ""; // var extensionPage = await opener.window.fetch("https://chrome.google.com/webstore/detail/" + extensionID) // console.log(extensionPage); // var extensionPageCode = await extensionPage.text() // var dom = new DOMParser().parseFromString(extensionPageCode, "text/html") // if (!dom.querySelector("img.e-f-s[src]")) return ""; // var extensionImage = dom.querySelector("img.e-f-s[src]").src; let extensionImages = (await (new Promise(resolve => {chrome.management.getAll(resolve)}))).filter(itm => itm.id == extensionID)[0].icons; console.log(extensionImages); let extensionImage = extensionImages[extensionImages.length - 1].url; return extensionImage; } //Toggle extensions function toggleExtension(e, extensionId) { if (e.hasAttribute("unchecked")) { chrome.management.setEnabled(extensionId, true) } else { chrome.management.setEnabled(extensionId, false) } } //Toggle the toggle function toggle(e) { if (e.hasAttribute("unchecked")) { e.removeAttribute("unchecked") } else { e.setAttribute("unchecked", "") } save(); } //Toggle animation function togglePress(e, dir) { if (dir == "down") { e.children[1].children[0].children[0].setAttribute("open", "") } else { setTimeout(function() { e.children[1].children[0].children[0].style.display = "none" e.children[1].children[0].children[0].removeAttribute("open") e.children[1].children[0].children[0].style.display = "initial" }, 80) } } //Sets dev mode function devMode() { if (document.body.hasAttribute("dev")) { document.body.removeAttribute("dev") localStorage.removeItem("dev") } else { document.body.setAttribute("dev", "") localStorage.setItem("dev", "true") } } //Creates extension element function addExtension(data) { var items = document.getElementById("items") var item = document.createElement("div") item.className = "item" item.setAttribute("data-id", data.id) if (data.managed) { item.setAttribute("managed", "") } var itemMain = document.createElement("div") itemMain.className = "item-main" var itemImgWrapper = document.createElement("div") itemImgWrapper.className = "item-img-wrapper" var itemImg = document.createElement("img") itemImg.className = "item-img" itemImg.src = data.logo var itemImgSource = document.createElement("div") itemImgSource.className = "item-img-source" itemImgSource.innerHTML = `` itemImgWrapper.appendChild(itemImg) itemImgWrapper.appendChild(itemImgSource) itemMain.appendChild(itemImgWrapper) var itemContent = document.createElement("div") itemContent.className = "item-content" var itemTitleAndVersion = document.createElement("div") itemTitleAndVersion.className = "item-title-and-version" var itemTitle = document.createElement("div") itemTitle.className = "item-title" itemTitle.innerText = data.title var itemVersion = document.createElement("div") itemVersion.className = "item-version" itemVersion.innerText = data.version itemTitleAndVersion.appendChild(itemTitle) itemTitleAndVersion.appendChild(itemVersion) itemContent.appendChild(itemTitleAndVersion) var itemDescriptionOverflow = document.createElement("div") itemDescriptionOverflow.className = "item-description-overflow" var itemDescription = document.createElement("div") itemDescription.className = "item-description" itemDescription.innerText = data.description itemDescriptionOverflow.appendChild(itemDescription) itemContent.appendChild(itemDescriptionOverflow) var itemId = document.createElement("div") itemId.className = "item-id" itemId.innerText = "ID: " + data.id itemContent.appendChild(itemId) itemMain.appendChild(itemContent) item.appendChild(itemMain) var itemButtons = document.createElement("div") itemButtons.className = "item-buttons" //Does not work on admin extensions /* var itemLeftButtons = document.createElement("div") itemLeftButtons.className = "item-left-buttons" var itemLeftButton = document.createElement("div") itemLeftButton.className = "item-left-button" itemLeftButton.innerText = "Remove" itemLeftButton.setAttribute("onclick", "removeExtension('" + data.id + "')") itemLeftButtons.appendChild(itemLeftButton) itemButtons.appendChild(itemLeftButtons) */ var itemToggle = document.createElement("div") itemToggle.className = "item-toggle" itemToggle.addEventListener("click", ev => { toggleExtension(ev.currentTarget, data.id); toggle(ev.currentTarget); }); itemToggle.addEventListener("mousedown", ev => { togglePress(ev.currentTarget, 'down'); }); itemToggle.addEventListener("mouseup", ev => { togglePress(ev.currentTarget, 'up'); }); if (!data.enabled) { itemToggle.setAttribute("unchecked", "") } var itemBar = document.createElement("div") itemBar.className = "item-bar" var itemKnob = document.createElement("div") itemKnob.className = "item-knob" var itemRipple = document.createElement("div") itemRipple.className = "item-ripple" var ripple = document.createElement("div") ripple.className = "ripple" itemRipple.appendChild(ripple) itemKnob.appendChild(itemRipple) itemToggle.appendChild(itemBar) itemToggle.appendChild(itemKnob) itemButtons.appendChild(itemToggle) item.appendChild(itemButtons) items.appendChild(item) } //Creates setting element function addSetting(data) { var items = document.getElementById("items") var item = document.createElement("div") item.className = "item" item.setAttribute("data-id", data.id) if (data.managed) { item.setAttribute("managed", "") } var itemMain = document.createElement("div") itemMain.className = "item-main" var itemImgWrapper = document.createElement("div") itemImgWrapper.className = "item-img-wrapper" var itemImg = document.createElement("img") itemImg.className = "item-img" itemImg.src = data.logo var itemImgSource = document.createElement("div") itemImgSource.className = "item-img-source" itemImgSource.innerHTML = `` itemImgWrapper.appendChild(itemImg) itemImgWrapper.appendChild(itemImgSource) itemMain.appendChild(itemImgWrapper) var itemContent = document.createElement("div") itemContent.className = "item-content" var itemTitleAndVersion = document.createElement("div") itemTitleAndVersion.className = "item-title-and-version" var itemTitle = document.createElement("div") itemTitle.className = "item-title" itemTitle.innerText = data.title var itemVersion = document.createElement("div") itemVersion.className = "item-version" itemVersion.innerText = data.version itemTitleAndVersion.appendChild(itemTitle) itemTitleAndVersion.appendChild(itemVersion) itemContent.appendChild(itemTitleAndVersion) var itemDescriptionOverflow = document.createElement("div") itemDescriptionOverflow.className = "item-description-overflow" var itemDescription = document.createElement("div") itemDescription.className = "item-description" itemDescription.innerText = data.description itemDescriptionOverflow.appendChild(itemDescription) itemContent.appendChild(itemDescriptionOverflow) var itemId = document.createElement("div") itemId.className = "item-id" itemId.innerText = "ID: " + data.id itemContent.appendChild(itemId) itemMain.appendChild(itemContent) item.appendChild(itemMain) var itemButtons = document.createElement("div") itemButtons.className = "item-buttons" //Does not work on admin extensions /* var itemLeftButtons = document.createElement("div") itemLeftButtons.className = "item-left-buttons" var itemLeftButton = document.createElement("div") itemLeftButton.className = "item-left-button" itemLeftButton.innerText = "Remove" itemLeftButton.setAttribute("onclick", "removeExtension('" + data.id + "')") itemLeftButtons.appendChild(itemLeftButton) itemButtons.appendChild(itemLeftButtons) */ var itemToggle = document.createElement("div") itemToggle.className = "item-toggle" itemToggle.addEventListener("click", ev => { toggle(ev.currentTarget); (async () => { JSON.stringify(await data.togglehandle(ev.currentTarget)); })(); }); itemToggle.addEventListener("mousedown", ev => { togglePress(ev.currentTarget, 'down'); }); itemToggle.addEventListener("mouseup", ev => { togglePress(ev.currentTarget, 'up'); }); if (!data.enabled) { itemToggle.setAttribute("unchecked", "") } var itemBar = document.createElement("div") itemBar.className = "item-bar" var itemKnob = document.createElement("div") itemKnob.className = "item-knob" var itemRipple = document.createElement("div") itemRipple.className = "item-ripple" var ripple = document.createElement("div") ripple.className = "ripple" itemRipple.appendChild(ripple) itemKnob.appendChild(itemRipple) itemToggle.appendChild(itemBar) itemToggle.appendChild(itemKnob) itemButtons.appendChild(itemToggle) item.appendChild(itemButtons) items.appendChild(item) } //Gets all extensions and adds them async function getExtensions() { const savedata = (await (new Promise(resolve => { chrome.storage.sync.get("ingotsave", resolve); })))["ingotsave"]; console.log(savedata); chrome.management.getAll(async function(allExtensions) { for (let anExtension in allExtensions) if (!allExtensions[anExtension].isApp || true) { if (savedata){ if (savedata.hasOwnProperty(allExtensions[anExtension].id)){ chrome.management.setEnabled(allExtensions[anExtension].id, savedata[allExtensions[anExtension].id]); allExtensions[anExtension].enabled = savedata[allExtensions[anExtension].id]; } } addExtension({ title: allExtensions[anExtension].name, version: allExtensions[anExtension].version, description: allExtensions[anExtension].description, id: allExtensions[anExtension].id, logo: allExtensions[anExtension].icons[allExtensions[anExtension].icons.length - 1].url, managed: allExtensions[anExtension].installType == "admin" ? true : false, enabled: allExtensions[anExtension].enabled, }); }; setInterval(reload, 2000); }); if (savedata && savedata.hasOwnProperty("proxy")){ if (await proxyEnabled() != savedata.proxy) { toggleProxy(); } } addSetting({ title: "Proxy Enabled", version: "Setting", description: "Disables iBoss proxy and kills background page when turned off.", logo: "", id: "proxy", managed: false, enabled: await proxyEnabled(), togglehandle: toggleProxy }); } function reload() { let items = document.querySelectorAll(".item"); items.forEach(async item => { if (item.getAttribute("data-id") == "proxy") { (await proxyEnabled()) ? item.querySelector(".item-toggle").removeAttribute("unchecked") : item.querySelector(".item-toggle").setAttribute("unchecked", ""); } else { chrome.management.get(item.getAttribute("data-id"), info => { if (info.enabled){ item.querySelector(".item-toggle").removeAttribute("unchecked"); } else { item.querySelector(".item-toggle").setAttribute("unchecked", ""); } }); } }) } async function toggleProxy(elem){ const currentproxy = await getCurrentProxy(); if (currentproxy["mode"] != "system" && elem.hasAttribute("unchecked")) { try{ chrome.extension.getBackgroundPage().close(); } catch {} return (await (new Promise (resolve => {chrome.proxy.settings.set( {scope: "regular", value: {mode: "system"}}, resolve );}))); } else if (currentproxy["mode"] == "system" && !elem.hasAttribute("unchecked")){ // chrome.extension.getBackgroundPage().window.location.reload(); chrome.runtime.reload() } else { reload(); } } async function getCurrentProxy(){ return (await (new Promise (resolve => {chrome.proxy.settings.get( {'incognito': false}, resolve );})))["value"]; } async function proxyEnabled(){ return (await getCurrentProxy())["mode"] != "system"; } function save() { // chrome.management.getAll(async data => { // let extensionStatus = {} // for (let x = 0; x < data.length; x++) { // extensionStatus[data[x].id] = data[x].enabled; // } // extensionStatus["proxy"] = await proxyEnabled(); // console.log(extensionStatus); // chrome.storage.sync.set({ingotsave: extensionStatus}); // }) return (new Promise( resolve => { chrome.storage.sync.get("ingotsave", ingotsave => { let extensionStatus = ingotsave.ingotsave || {}; let items = document.querySelectorAll(".item"); items.forEach(item => { extensionStatus[item.getAttribute("data-id")] = !item.querySelector(".item-toggle").hasAttribute("unchecked"); }); chrome.storage.sync.set({ingotsave: extensionStatus}, resolve); }); })); } async function setIcons() { var items = document.querySelectorAll(".items .item") for (let item in items) { try { items[item].querySelector(".item-main .item-img-wrapper .item-img").src = await getIconFromExtension(items[item].dataset.id) } catch {} } } document.querySelector("iframe").addEventListener("load", () => { if (opener || chrome.management) { //Checks if it still works if (chrome.management) { if (opener) { setTimeout(() => { opener.close(); }, 2000); } getExtensions(); } else { document.getElementById("items").setAttribute("patched", ""); } } else { document.getElementById("items").setAttribute("wrongpage", ""); } });