package com.nvarghese.beowulf.sfc.services;
import java.net.UnknownHostException;
import org.apache.commons.configuration.ConfigurationException;
import org.bson.types.ObjectId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.code.morphia.Datastore;
import com.nvarghese.beowulf.common.BeowulfCommonConfigManager;
import com.nvarghese.beowulf.common.ds.DataStoreUtil;
import com.nvarghese.beowulf.common.jobs.ReportGenerateJob;
import com.nvarghese.beowulf.common.report.ReportFormat;
import com.nvarghese.beowulf.common.scan.dao.WebScanDAO;
import com.nvarghese.beowulf.common.scan.model.WebScanDocument;
import com.nvarghese.beowulf.common.utils.ByteUtils;
import com.nvarghese.beowulf.common.webtest.ThreatSeverityType;
import com.nvarghese.beowulf.sfc.SFControllerManager;
import com.nvarghese.beowulf.sfc.report.generator.AbstractReportGenerator;
import com.nvarghese.beowulf.sfc.report.generator.HtmlReportGenerator;
public class ReportService {
static Logger logger = LoggerFactory.getLogger(ReportService.class);
public void generateReport(ReportGenerateJob reportGenerateJob) {
logger.info("New report_gen job received to generate report with WebScanDocument#obj_id: {}", reportGenerateJob.getWebScanObjectId());
ObjectId id = new ObjectId(reportGenerateJob.getWebScanObjectId());
WebScanDAO webScanDAO = new WebScanDAO(SFControllerManager.getInstance().getDataStore());
WebScanDocument webScanDocument = webScanDAO.getWebScanDocument(id);
if (webScanDocument != null) {
String reportFileName = "report_" + ByteUtils.toHex(ByteUtils.getRandomBytes(6));
Datastore scanInstanceDs;
try {
scanInstanceDs = DataStoreUtil.createOrGetDataStore(BeowulfCommonConfigManager.getDbUri(), webScanDocument.getTxnDbName());
AbstractReportGenerator reportGenerator = new HtmlReportGenerator(webScanDocument, scanInstanceDs, ReportFormat.HTML, reportFileName,
ThreatSeverityType.INFO);
reportGenerator.generateReport();
} catch (UnknownHostException e) {
logger.error("Failed to generate report. Reason: {}", e.getMessage(), e);
} catch (ConfigurationException e) {
logger.error("Failed to generate report. Reason: {}", e.getMessage(), e);
}
}
}
}