Newer
Older
const { SettingsManager } = require("./SettingsManager");
const { TokenManager } = require("./TokenManager");
let settingsManager = new SettingsManager();
if (typeof browser == "undefined") {
var browser = chrome;
}
/**
* Handle messages between content scripts and background script:
* 1. Handles events where the user changed search settings so they
* can be synchronized with the extension storage.
* 2. Handle attaching anonymous tokens to the search request of the user
* so the request can be properly authorized.
*/
browser.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (!request.hasOwnProperty("type")) return;
if (request.type == "settings_set" && request.hasOwnProperty("settings")) {
settingsManager.set(request.settings).then(() => {
sendResponse({ status: "ok" });
}).catch(error => {
console.trace(error);
sendResponse({ status: "error" });
}
if (request.type == "settings_remove" && request.hasOwnProperty("setting_key")) {
if (request.setting_key == "key") {
tokenManager.store_key(null).then(() => {
sendResponse({ status: "ok" });
}).catch(error => {
console.trace(error);
sendResponse({ status: "error" });
});
} else {
settingsManager.remove(request.setting_key).then(() => {
sendResponse({ status: "ok" });
}).catch(error => {
console.trace(error);
sendResponse({ status: "error" });
if (request.type == "tokenauthorization") {
tokenManager.prepare_token_auth(request.cost).then(() => {
/**
* When the user enables/disables storage of settings within this
* web-extension we'll grab all existing settings and put it into
* the web-extension or vise versa.
* Those settings will also be disabled if the user removes the necessary
* host permissions from the extension or enabled if they get externally granted
* and the user already enabled storage of the settings
browser.storage.onChanged.addListener(async (changes, areaName) => {
settingsManager.handleStorageChange(changes);
tokenManager.handleStorageChange(changes);
browser.permissions.onAdded.addListener(async (permissions) => {
await settingsManager.handlePermissionsChange(permissions);
await tokenManager.handlePermissionsChange(permissions);
});
browser.permissions.onRemoved.addListener(async (permissions) => {
await settingsManager.handlePermissionsChange(permissions);
await tokenManager.handlePermissionsChange(permissions);
* Make sure we also catch changes in search settings when they
* are added i.e. using the dev tools or the setting cookies
* are getting restored in other ways.
*/
browser.cookies.onChanged.addListener(async changeInfo => {
await settingsManager.handleCookieChange(changeInfo);
await tokenManager.handleCookieChange(changeInfo);
})
/**
* Alternatively catch changes in search settings by parsing the
* cookies in response headers to make sure the webextensions
* stores all search settings consistently.
* Headers will not be modified in those listeners.
// Handle Request Headers
let extraInfoSpecRequest = ["requestHeaders"];
if (BROWSER == "CHROME") {
extraInfoSpecRequest.push("extraHeaders");
}
browser.webRequest.onBeforeSendHeaders.addListener(
async (details) => {
let headers = await tokenManager.handleRequestHeaders(details);
return { requestHeaders: headers };
},
{
urls: ["https://metager.org/*", "https://metager.de/*"],
},
);
// Handle Response Headers
let extraInfoSpecResponse = ["responseHeaders"];
if (BROWSER == "CHROME") {
extraInfoSpecResponse.push("extraHeaders");
}
browser.webRequest.onHeadersReceived.addListener(
(details) => {
settingsManager.handleResponseHeaders(details);
tokenManager.handleResponseHeaders(details);
},
{
urls: ["https://metager.org/*", "https://metager.de/*"],
},
/**
* Open settings page when user installs the addon
* as additional permissions might be required to use
* all features of this extension.
* Opening the page on update is not required if the user comes from
* a version that already has a settings page included
*/
browser.runtime.onInstalled.addListener(details => {
let open_settings_page = false;
if (details.reason == "update" && details.previousVersion == "0.0.1.3") {
open_settings_page = true;
}
if (details.reason == "install") {
open_settings_page = true;
}
if (details.temporary == true) {
open_settings_page = false;
}
if (open_settings_page) {
browser.runtime.openOptionsPage();
}
})