Refactor MitmServerCard to use input field for API key selection and enhance shutdown process to remove DNS entries synchronously. Added removeAllDNSEntriesSync function for safe cleanup during shutdown.
This commit is contained in:
@@ -214,11 +214,35 @@ async function removeAllDNSEntries(sudoPassword) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sync removal of ALL tool DNS entries — for use during process shutdown
|
||||
* when async ops aren't safe. Assumes caller already has root/admin rights.
|
||||
*/
|
||||
function removeAllDNSEntriesSync() {
|
||||
try {
|
||||
if (!fs.existsSync(HOSTS_FILE)) return;
|
||||
const allHosts = Object.values(TOOL_HOSTS).flat();
|
||||
const content = fs.readFileSync(HOSTS_FILE, "utf8");
|
||||
const eol = IS_WIN ? "\r\n" : "\n";
|
||||
const filtered = content.split(/\r?\n/).filter(l => !allHosts.some(h => l.includes(h))).join(eol);
|
||||
if (filtered === content) return;
|
||||
fs.writeFileSync(HOSTS_FILE, filtered, "utf8");
|
||||
if (IS_WIN) {
|
||||
try { execSync("ipconfig /flushdns", { windowsHide: true, stdio: "ignore" }); } catch { /* ignore */ }
|
||||
} else if (IS_MAC) {
|
||||
try { execSync("dscacheutil -flushcache && killall -HUP mDNSResponder", { stdio: "ignore" }); } catch { /* ignore */ }
|
||||
} else {
|
||||
try { execSync("resolvectl flush-caches 2>/dev/null || true", { stdio: "ignore" }); } catch { /* ignore */ }
|
||||
}
|
||||
} catch { /* best effort during shutdown */ }
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
TOOL_HOSTS,
|
||||
addDNSEntry,
|
||||
removeDNSEntry,
|
||||
removeAllDNSEntries,
|
||||
removeAllDNSEntriesSync,
|
||||
execWithPassword,
|
||||
isSudoAvailable,
|
||||
executeElevatedPowerShell,
|
||||
|
||||
@@ -266,7 +266,16 @@ server.on("error", (e) => {
|
||||
process.exit(1);
|
||||
});
|
||||
|
||||
const shutdown = () => server.close(() => process.exit(0));
|
||||
const { removeAllDNSEntriesSync } = require("./dns/dnsConfig");
|
||||
let isShuttingDown = false;
|
||||
const shutdown = () => {
|
||||
if (isShuttingDown) return;
|
||||
isShuttingDown = true;
|
||||
// Strip tool hosts from /etc/hosts so other apps aren't broken after exit
|
||||
removeAllDNSEntriesSync();
|
||||
const forceExit = setTimeout(() => process.exit(0), 1500);
|
||||
server.close(() => { clearTimeout(forceExit); process.exit(0); });
|
||||
};
|
||||
process.on("SIGTERM", shutdown);
|
||||
process.on("SIGINT", shutdown);
|
||||
if (process.platform === "win32") process.on("SIGBREAK", shutdown);
|
||||
|
||||
Reference in New Issue
Block a user