const { Cookie } = require("./Cookie"); const { SettingsManager } = require("./SettingsManager"); const { TokenManager } = require("./TokenManager"); let settingsManager = new SettingsManager(); let tokenManager = new TokenManager(); if (typeof browser == "undefined") { var browser = chrome; } 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" }); }); return true; } if (request.type == "settings_remove" && request.hasOwnProperty("setting_key")) { settingsManager.remove(request.setting_key).then(() => { sendResponse({ status: "ok" }); }); return true; } }); /** * 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 */ browser.storage.onChanged.addListener(async (changes, areaName) => { settingsManager.handleStorageChange(changes); tokenManager.handleStorageChange(changes); }); /** * This extension offers two main features: * 1. Permanently storing all user settings especially when cookies are being regulary deleted * 2. Use homomorphic encryption to anonymize the usage of a MetaGer Key * * Those features are implemented using the following listeners which are able * to modify the request/response headers from MetaGer. */ // Handle Request Headers browser.webRequest.onBeforeSendHeaders.addListener( async (details) => { let headers = await tokenManager.handleRequestHeaders(details); return { requestHeaders: headers }; }, { urls: ["https://metager.org/*", "https://metager.de/*"], }, ["requestHeaders"] ); // Handle Response Headers browser.webRequest.onHeadersReceived.addListener( async (details) => { details.responseHeaders = await settingsManager.handleResponseHeaders( details ); let headers = await tokenManager.handleResponseHeaders(details); return { responseHeaders: headers }; }, { urls: ["https://metager.org/*", "https://metager.de/*"], }, ["responseHeaders"] ); /** * 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(); } })