diff --git a/packages/safe-chain/src/main.js b/packages/safe-chain/src/main.js index 9dd61d6..1d259c9 100644 --- a/packages/safe-chain/src/main.js +++ b/packages/safe-chain/src/main.js @@ -5,7 +5,6 @@ import { ui } from "./environment/userInteraction.js"; import { getPackageManager } from "./packagemanager/currentPackageManager.js"; import { initializeCliArguments } from "./config/cliArguments.js"; import { createSafeChainProxy } from "./registryProxy/registryProxy.js"; -import chalk from "chalk"; export async function main(args) { const proxy = createSafeChainProxy(); @@ -26,26 +25,7 @@ export async function main(args) { var result = await getPackageManager().runCommand(args); await proxy.stopServer(); - const blockedRequests = proxy.getBlockedRequests(); - if (blockedRequests.length > 0) { - ui.emptyLine(); - - ui.writeInformation( - `Safe-chain: ${chalk.bold( - `blocked ${blockedRequests.length} malicious package downloads` - )}:` - ); - - for (const req of blockedRequests) { - ui.writeInformation(` - ${req.packageName}@${req.version} (${req.url})`); - } - - ui.emptyLine(); - ui.writeError("Exiting without installing malicious packages."); - ui.emptyLine(); - - process.exit(1); - } + proxy.verifyNoMaliciousPackages(); process.exit(result.status); } diff --git a/packages/safe-chain/src/registryProxy/registryProxy.js b/packages/safe-chain/src/registryProxy/registryProxy.js index fb83c0e..c2812de 100644 --- a/packages/safe-chain/src/registryProxy/registryProxy.js +++ b/packages/safe-chain/src/registryProxy/registryProxy.js @@ -4,6 +4,8 @@ import { mitmConnect } from "./mitmRequestHandler.js"; import { getCaCertPath } from "./certUtils.js"; import { auditChanges } from "../scanning/audit/index.js"; import { knownRegistries, parsePackageFromUrl } from "./parsePackageFromUrl.js"; +import { ui } from "../environment/userInteraction.js"; +import chalk from "chalk"; const state = { port: null, @@ -18,6 +20,7 @@ export function createSafeChainProxy() { startServer: () => startServer(server), stopServer: () => stopServer(server), getBlockedRequests: () => state.blockedRequests, + verifyNoMaliciousPackages, }; } @@ -117,3 +120,27 @@ async function isAllowedUrl(url) { return true; } + +function verifyNoMaliciousPackages() { + if (state.blockedRequests.length === 0) { + return; + } + + ui.emptyLine(); + + ui.writeInformation( + `Safe-chain: ${chalk.bold( + `blocked ${state.blockedRequests.length} malicious package downloads` + )}:` + ); + + for (const req of state.blockedRequests) { + ui.writeInformation(` - ${req.packageName}@${req.version} (${req.url})`); + } + + ui.emptyLine(); + ui.writeError("Exiting without installing malicious packages."); + ui.emptyLine(); + + process.exit(1); +}