vuln-reporter
Version:
通用型漏洞掃描與報告工具 - 用於解析 Trivy 掃描結果、生成 Excel 報告並發送 Teams 通知的 CLI 工具
64 lines • 2.07 kB
JavaScript
import { TrivyParser } from './trivy-parser.js';
export class ParserRegistry {
parsers = new Map();
constructor() {
// 註冊預設的解析器
this.registerParser('trivy', new TrivyParser());
}
registerParser(scannerType, parser) {
this.parsers.set(scannerType, parser);
}
getParser(scannerType) {
return this.parsers.get(scannerType);
}
/**
* 根據報告內容自動偵測適合的解析器
*/
detectParser(reportData) {
// 檢測 Trivy 格式
if (this.isTrivyFormat(reportData)) {
return {
parser: this.parsers.get('trivy'),
scannerType: 'trivy',
};
}
// 未來可以加入其他格式的檢測邏輯
// if (this.isNpmAuditFormat(reportData)) {
// return {
// parser: this.parsers.get('npm-audit')!,
// scannerType: 'npm-audit'
// };
// }
throw new Error('無法識別報告格式,請檢查輸入檔案是否為支援的掃描工具格式');
}
/**
* 檢測是否為 Trivy 格式
*/
isTrivyFormat(data) {
return (typeof data === 'object' &&
data !== null &&
'SchemaVersion' in data &&
'Results' in data &&
Array.isArray(data.Results) &&
('CreatedAt' in data ||
data.Results.length === 0 || // 允許空的 Results 陣列
data.Results.some((result) => result && 'Target' in result && 'Class' in result && 'Type' in result)));
}
/**
* 檢測是否為 NPM Audit 格式 (範例)
*/
isNpmAuditFormat(data) {
return (typeof data === 'object' &&
data !== null &&
'advisories' in data &&
'metadata' in data &&
typeof data.advisories === 'object');
}
/**
* 列出所有已註冊的解析器
*/
listAvailableParsers() {
return Array.from(this.parsers.keys());
}
}
//# sourceMappingURL=parser-registry.js.map