mirror of
https://github.com/AikidoSec/safe-chain.git
synced 2026-05-26 12:10:49 +00:00
Move safe-chain package to packages/safe-chain
This commit is contained in:
parent
fc9a9ca129
commit
7673d32912
68 changed files with 85 additions and 52 deletions
72
packages/safe-chain/src/scanning/malwareDatabase.js
Normal file
72
packages/safe-chain/src/scanning/malwareDatabase.js
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
import {
|
||||
fetchMalwareDatabase,
|
||||
fetchMalwareDatabaseVersion,
|
||||
} from "../api/aikido.js";
|
||||
import {
|
||||
readDatabaseFromLocalCache,
|
||||
writeDatabaseToLocalCache,
|
||||
} from "../config/configFile.js";
|
||||
import { ui } from "../environment/userInteraction.js";
|
||||
|
||||
export async function openMalwareDatabase() {
|
||||
const malwareDatabase = await getMalwareDatabase();
|
||||
|
||||
function getPackageStatus(name, version) {
|
||||
const packageData = malwareDatabase.find(
|
||||
(pkg) =>
|
||||
pkg.package_name === name &&
|
||||
(pkg.version === version || pkg.version === "*")
|
||||
);
|
||||
|
||||
if (!packageData) {
|
||||
return MALWARE_STATUS_OK;
|
||||
}
|
||||
|
||||
return packageData.reason;
|
||||
}
|
||||
|
||||
return {
|
||||
getPackageStatus,
|
||||
isMalware: (name, version) => {
|
||||
const status = getPackageStatus(name, version);
|
||||
return isMalwareStatus(status);
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
async function getMalwareDatabase() {
|
||||
const { malwareDatabase: cachedDatabase, version: cachedVersion } =
|
||||
readDatabaseFromLocalCache();
|
||||
|
||||
try {
|
||||
if (cachedDatabase) {
|
||||
const currentVersion = await fetchMalwareDatabaseVersion();
|
||||
if (cachedVersion === currentVersion) {
|
||||
return cachedDatabase;
|
||||
}
|
||||
}
|
||||
|
||||
const { malwareDatabase, version } = await fetchMalwareDatabase();
|
||||
writeDatabaseToLocalCache(malwareDatabase, version);
|
||||
|
||||
return malwareDatabase;
|
||||
} catch (error) {
|
||||
if (cachedDatabase) {
|
||||
ui.writeWarning(
|
||||
"Failed to fetch the latest malware database. Using cached version."
|
||||
);
|
||||
return cachedDatabase;
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
function isMalwareStatus(status) {
|
||||
let malwareStatus = status.toUpperCase();
|
||||
return malwareStatus === MALWARE_STATUS_MALWARE;
|
||||
}
|
||||
|
||||
export const MALWARE_STATUS_OK = "OK";
|
||||
export const MALWARE_STATUS_MALWARE = "MALWARE";
|
||||
export const MALWARE_STATUS_TELEMETRY = "TELEMETRY";
|
||||
export const MALWARE_STATUS_PROTESTWARE = "PROTESTWARE";
|
||||
Loading…
Add table
Add a link
Reference in a new issue