Files
EnterpriseAppProtection/background.js
becarta ba83c95914 feat: Add Enterprise App Protection extension with settings and popup UI
- Implement manifest.json for Chrome extension with necessary permissions and background scripts.
- Create options.html for user settings including Google Safe Browsing API key, domains database URL, update interval, and warning message template.
- Develop options.js to handle loading and saving settings using Chrome storage.
- Design popup.html to display suspicious links and provide options to update the database and manage domains.
- Implement popup.js to manage interactions in the popup, including updating the database and resetting the suspicious links counter.
- Add testsite.html for dynamic testing of the extension with both official and fake links.
2025-05-10 03:25:49 +02:00

100 lines
3.5 KiB
JavaScript

// background.js
console.log("Background service worker loaded");
let domainsDB = {};
async function updateDomainsDB() {
chrome.storage.local.get(["domainsDBURL"], async function (result) {
const domainsDBURL = result.domainsDBURL || "https://raw.githubusercontent.com/rrpbergsma/EnterpriseAppProtection/refs/heads/main/domains.json";
console.log("updateDomainsDB: Starting update from URL:", domainsDBURL);
try {
const response = await fetch(domainsDBURL);
if (!response.ok) {
console.error("updateDomainsDB: Fetch failed with status", response.status, response.statusText);
return;
}
domainsDB = await response.json();
chrome.storage.local.set({
domainsDB: domainsDB,
lastUpdate: Date.now()
}, () => {
console.log("updateDomainsDB: Database updated successfully at", new Date().toLocaleString());
});
} catch (error) {
console.error("updateDomainsDB: Failed to update domains database:", error);
}
});
}
// Run updates when the extension is installed or started
chrome.runtime.onInstalled.addListener(() => {
console.log("Extension installed");
updateDomainsDB();
});
chrome.runtime.onStartup.addListener(() => {
console.log("Service worker started");
updateDomainsDB();
});
// Periodic update based on UPDATE_INTERVAL (in hours)
setInterval(() => {
chrome.storage.local.get(["updateInterval"], function (result) {
const updateInterval = result.updateInterval || 24;
console.log("Periodic update triggered");
updateDomainsDB();
});
}, 3600000);
// Listen for manual update messages (e.g., from the popup)
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
console.log("onMessage: Received message:", message);
if (message.action === "updateDB") {
console.log("onMessage: Manual update triggered via Update Now button");
updateDomainsDB().then(() => {
console.log("onMessage: Manual update completed");
sendResponse({ status: "updated" });
});
return true; // Keep message channel open for async response
}
if (message.action === "updatePopup") {
// Store flagged links and update the total suspicious count
chrome.storage.local.get(["totalSuspiciousLinks"], (result) => {
let totalCount = result.totalSuspiciousLinks || 0;
totalCount += message.flaggedLinks.length; // Add new links found in this session
chrome.storage.local.set({
flaggedLinks: message.flaggedLinks,
totalSuspiciousLinks: totalCount
}, () => {
console.log(`Updated totalSuspiciousLinks: ${totalCount}`);
});
});
}
if (message.action === "getSuspiciousLinks") {
// Retrieve both flagged links and total suspicious link count
chrome.storage.local.get(["flaggedLinks", "totalSuspiciousLinks"], (data) => {
sendResponse({
count: data.totalSuspiciousLinks || 0,
links: data.flaggedLinks || []
});
});
return true; // Keep message channel open for async response
}
});
// Debug Mode: Keep-alive mechanism for testing
const DEBUG_MODE = false; // Set to 'true' for testing
if (DEBUG_MODE) {
chrome.alarms.create("keepAlive", { delayInMinutes: 0.1, periodInMinutes: 0.1 });
chrome.alarms.onAlarm.addListener((alarm) => {
if (alarm.name === "keepAlive") {
console.log("keepAlive alarm triggered, service worker is active");
}
});
}