import { CommandOptions } from './ecs-client'; import { spawnSync } from 'child_process'; import { connectToDatabase, Organization, Vulnerability } from '../models'; import * as path from 'path'; import { writeFileSync } from 'fs'; import { getPeEnv } from './helpers/getPeEnv'; const HIBP_SYNC_DIRECTORY = '/app/worker/pe_scripts/hibpSyncFiles'; // Sync Crossfeed's hibp data with PE's db instance export const handler = async (commandOptions: CommandOptions) => { const { organizationId, organizationName } = commandOptions; await connectToDatabase(); const vulnerabilities = await Vulnerability.createQueryBuilder('vuln') .select('vuln.structuredData', 'structuredData') .addSelect('dom.fromRootDomain', 'fromRootDomain') .addSelect('dom.name', 'name') .innerJoin('vuln.domain', 'dom') .where('dom.organizationId = :org_id', { org_id: organizationId }) .andWhere("vuln.source = 'hibp'") .getRawMany(); const INPUT_PATH = path.join(HIBP_SYNC_DIRECTORY, organizationId + '.json'); writeFileSync(INPUT_PATH, JSON.stringify(vulnerabilities)); const child = spawnSync( 'python3', ['/app/worker/pe_scripts/sync_hibp_pe.py'], { stdio: 'pipe', encoding: 'utf-8', env: { ...getPeEnv(), data_path: INPUT_PATH, org_name: organizationName, org_id: organizationId } } ); const savedOutput = child.stdout; console.log(savedOutput); };