Files

219 lines
5.7 KiB
JavaScript

/*
1000 Bots - Surf the Web as Googlebot
Copyleft (C) 2020 !Mediengruppe Bitnik, connect@bitnik.org
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
"use strict";
var browser = browser || chrome;
var user_agent =
"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)";
var target_urls = "*://*/*";
var status = 0;
const DEBUG = true; // Set to true to enable debug mode
// Duration to display the injected HTML (in milliseconds)
const DISPLAY_DURATION = 8000; // Set to 8 seconds
// Initialize storage for duration
browser.storage.sync.set(
{ duration: DISPLAY_DURATION, debug: DEBUG },
function () {
if (browser.runtime.lastError) {
console.error("Error setting duration:", browser.runtime.lastError);
} else {
if (DEBUG) console.log("Duration set to:", DISPLAY_DURATION);
}
}
);
// Inject the content.js script into all active tabs
function injectContentScript() {
browser.tabs.query({}, (tabs) => {
tabs.forEach((tab) => {
// Check if the URL is not something like chrome:// or about:// etc.
if (tab.url.startsWith("https://")) {
browser.tabs.executeScript(
tab.id,
{ file: "content.js" },
() => {
if (browser.runtime.lastError) {
console.error(
`Error injecting content script into tab ${tab.id}:`,
browser.runtime.lastError
);
} else {
if (DEBUG)
console.log(
`Content script injected into tab ${tab.id}`
);
// If the duration has passed, removeInjectedContent
const interval = setInterval(() => {
browser.storage.sync.get(
"duration",
(result) => {
if (browser.runtime.lastError) {
console.error(
"Error fetching duration:",
browser.runtime.lastError
);
} else if (result.duration <= 0) {
clearInterval(interval);
removeInjectedContent();
}
}
);
});
}
}
);
} else {
if (DEBUG)
console.log(
`Skipped injecting content script into tab ${tab.id} (chrome://, about:// URL or similar)`
);
}
});
});
}
// Remove the content from all active tabs
function removeInjectedContent() {
browser.tabs.query({}, (tabs) => {
tabs.forEach((tab) => {
if (tab.url.startsWith("https://")) {
browser.tabs.executeScript(
tab.id,
{
code: `
const banner = document.querySelector('.extension-banner');
if (banner && banner.parentNode) {
banner.parentNode.removeChild(banner);
}
`,
},
() => {
if (browser.runtime.lastError) {
console.error(
`Error removing injected content from tab ${tab.id}:`,
browser.runtime.lastError
);
} else {
if (DEBUG)
console.log(
`Removed injected content from tab ${tab.id}`
);
}
}
);
} else {
if (DEBUG)
console.log(
`Skipped removing injected content from tab ${tab.id} (chrome://, about:// URL or similar)`
);
}
});
});
}
// Function to refresh all active tabs
function refreshAllTabs() {
browser.tabs.query({}, (tabs) => {
tabs.forEach((tab) => {
if (tab.url.startsWith("https://")) {
browser.tabs.reload(tab.id, () => {
if (browser.runtime.lastError) {
console.error(
`Error refreshing tab ${tab.id}:`,
browser.runtime.lastError
);
} else {
if (DEBUG) console.log(`Refreshed tab: ${tab.id}`);
}
});
} else {
if (DEBUG)
console.log(
`Skipped refreshing tab ${tab.id} (URL does not start with https://)`
);
}
});
});
}
function set_extension_status_ON() {
status = 1;
if (DEBUG) console.log("Setting status to ON");
browser.browserAction.setIcon({ path: "icon_ON_48.png" });
browser.browserAction.setTitle({
title: "You are now surfing the web as a bot 🤖",
});
refreshAllTabs();
setTimeout(() => {
injectContentScript();
}, 500);
}
function set_extension_status_OFF() {
status = 0;
if (DEBUG) console.log("Setting status to OFF");
browser.browserAction.setIcon({ path: "icon_OFF_48.png" });
browser.browserAction.setTitle({
title: "Click here to refuse to be human 🤖",
});
removeInjectedContent();
refreshAllTabs();
}
function update_icon() {
if (status == 0) {
set_extension_status_ON();
} else {
set_extension_status_OFF();
}
}
function rewrite_user_agent_header(e) {
if (DEBUG) console.log("Browser http request!");
if (status == 0) {
if (DEBUG) console.log("Nothing to do");
return { requestHeaders: e.requestHeaders };
}
for (var header of e.requestHeaders) {
if (header.name.toLowerCase() === "user-agent") {
header.value = user_agent;
}
}
if (DEBUG) console.log("Set user-agent header to: " + user_agent);
return { requestHeaders: e.requestHeaders };
}
browser.runtime.onStartup.addListener(set_extension_status_OFF);
browser.browserAction.onClicked.addListener(update_icon);
browser.webRequest.onBeforeSendHeaders.addListener(
rewrite_user_agent_header,
{ urls: [target_urls] },
["blocking", "requestHeaders"]
);