snyk-docker-plugin
Version:
Snyk CLI docker plugin
67 lines (63 loc) • 1.55 kB
text/typescript
import { AnalysisType, AnalyzedPackage, ImageAnalysis } from "../types";
export function analyze(
targetImage: string,
apkDbFileContent: string,
): Promise<ImageAnalysis> {
return Promise.resolve({
Image: targetImage,
AnalyzeType: AnalysisType.Apk,
Analysis: parseFile(apkDbFileContent),
});
}
function parseFile(text: string) {
const pkgs: AnalyzedPackage[] = [];
let curPkg: any = null;
for (const line of text.split("\n")) {
curPkg = parseLine(line, curPkg, pkgs);
}
return pkgs;
}
function parseLine(
text: string,
curPkg: AnalyzedPackage,
pkgs: AnalyzedPackage[],
) {
const key = text.charAt(0);
const value = text.substr(2).trim();
switch (key) {
case "P": // Package
curPkg = {
Name: value,
Version: undefined,
Source: undefined,
Provides: [],
Deps: {},
AutoInstalled: undefined,
};
pkgs.push(curPkg);
break;
case "V": // Version
curPkg.Version = value;
break;
case "p": // Provides
for (let name of value.split(" ")) {
name = name.split("=")[0];
curPkg.Provides.push(name);
}
break;
case "r": // Depends
case "D": // Depends
// tslint:disable-next-line:no-duplicate-variable
for (let name of value.split(" ")) {
if (name.charAt(0) !== "!") {
name = name.split("=")[0];
curPkg.Deps[name] = true;
}
}
break;
case "o": // Origin
curPkg.Source = value;
break;
}
return curPkg;
}