| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| ResultViewer::ResultViewer(QWidget* parent): |
| QWidget(parent), |
| |
| mReportFile(0) |
| { |
| mUI.setupUi(this); |
| |
| mSaveResultsAction = new QAction("&XCCDF Result file", this); |
| QObject::connect( |
| mSaveResultsAction, SIGNAL(triggered()), |
| this, SLOT(saveResults()) |
| ); |
| mSaveARFAction = new QAction("&ARF", this); |
| QObject::connect( |
| mSaveARFAction, SIGNAL(triggered()), |
| this, SLOT(saveARF()) |
| ); |
| mSaveReportAction = new QAction("&HTML Report", this); |
| QObject::connect( |
| mSaveReportAction, SIGNAL(triggered()), |
| this, SLOT(saveReport()) |
| ); |
| mSaveMenu = new QMenu(this); |
| mSaveMenu->addAction(mSaveResultsAction); |
| mSaveMenu->addAction(mSaveARFAction); |
| mSaveMenu->addAction(mSaveReportAction); |
| mUI.saveButton->setMenu(mSaveMenu); |
| |
| QAction* genBashRemediation = new QAction("&bash", this); |
| QObject::connect( |
| genBashRemediation, SIGNAL(triggered()), |
| this, SLOT(generateBashRemediationRole()) |
| ); |
| QAction* genAnsibleRemediation = new QAction("&ansible", this); |
| QObject::connect( |
| genAnsibleRemediation, SIGNAL(triggered()), |
| this, SLOT(generateAnsibleRemediationRole()) |
| ); |
| QAction* genPuppetRemediation = new QAction("&puppet", this); |
| QObject::connect( |
| genPuppetRemediation, SIGNAL(triggered()), |
| this, SLOT(generatePuppetRemediationRole()) |
| ); |
| QMenu* genMenu = new QMenu(this); |
| genMenu->addAction(genBashRemediation); |
| genMenu->addAction(genAnsibleRemediation); |
| genMenu->addAction(genPuppetRemediation); |
| mUI.genRemediationButton->setMenu(genMenu); |
| |
| QObject::connect( |
| mUI.openReportButton, SIGNAL(clicked()), |
| this, SLOT(openReport()) |
| ); |
| } |
| |
| ResultViewer::~ResultViewer() |
| { |
| delete mReportFile; |
| mReportFile = 0; |
| } |
| |
| void ResultViewer::clear() |
| { |
| mInputBaseName.clear(); |
| |
| mResults.clear(); |
| mReport.clear(); |
| mARF.clear(); |
| } |
| |
| void ResultViewer::loadContent(Scanner* scanner) |
| { |
| mInputBaseName = "scap"; |
| |
| ScanningSession* session = scanner->getSession(); |
| if (session) |
| { |
| QFileInfo openedFile(session->getOpenedFilePath()); |
| mInputBaseName = openedFile.baseName(); |
| |
| if (mInputBaseName.endsWith("-xccdf")) |
| mInputBaseName.chop(QString("-xccdf").length()); |
| } |
| |
| mReport.clear(); |
| scanner->getReport(mReport); |
| |
| mResults.clear(); |
| scanner->getResults(mResults); |
| |
| mARF.clear(); |
| scanner->getARF(mARF); |
| } |
| |
| const QByteArray& ResultViewer::getARF() const |
| { |
| return mARF; |
| } |
| |
| void ResultViewer::saveReport() |
| { |
| const QString filename = QFileDialog::getSaveFileName(this, |
| QObject::tr("Save Report (HTML)"), |
| QObject::tr("%1-xccdf.report.html").arg(mInputBaseName), |
| QObject::tr("HTML Report (*.html)"), 0 |
| |
| , QFileDialog::DontUseNativeDialog |
| |
| ); |
| |
| if (filename.isEmpty()) |
| return; |
| |
| QFile file(filename); |
| file.open(QIODevice::WriteOnly); |
| file.write(mReport); |
| file.close(); |
| } |
| |
| void ResultViewer::openReport() |
| { |
| if (mReportFile) |
| { |
| delete mReportFile; |
| mReportFile = 0; |
| } |
| |
| mReportFile = new QTemporaryFile(); |
| mReportFile->setFileTemplate(mReportFile->fileTemplate() + ".html"); |
| mReportFile->open(); |
| mReportFile->write(mReport); |
| mReportFile->flush(); |
| mReportFile->close(); |
| |
| openUrlGuarded(QUrl::fromLocalFile(mReportFile->fileName())); |
| |
| |
| } |
| |
| |
| void ResultViewer::generateBashRemediationRole() |
| { |
| BashResultRemediationSaver remediation(this, mARF); |
| remediation.selectFilenameAndSaveRole(); |
| } |
| |
| void ResultViewer::generateAnsibleRemediationRole() |
| { |
| AnsibleResultRemediationSaver remediation(this, mARF); |
| remediation.selectFilenameAndSaveRole(); |
| } |
| |
| void ResultViewer::generatePuppetRemediationRole() |
| { |
| PuppetResultRemediationSaver remediation(this, mARF); |
| remediation.selectFilenameAndSaveRole(); |
| } |
| |
| void ResultViewer::saveResults() |
| { |
| const QString filename = QFileDialog::getSaveFileName(this, |
| QObject::tr("Save as XCCDF Results"), |
| QObject::tr("%1-xccdf.results.xml").arg(mInputBaseName), |
| QObject::tr("XCCDF Results (*.xml)"), 0 |
| |
| , QFileDialog::DontUseNativeDialog |
| |
| ); |
| |
| if (filename.isEmpty()) |
| return; |
| |
| QFile file(filename); |
| file.open(QIODevice::WriteOnly); |
| file.write(mResults); |
| file.close(); |
| } |
| |
| void ResultViewer::saveARF() |
| { |
| const QString filename = QFileDialog::getSaveFileName(this, |
| QObject::tr("Save as Result DataStream / ARF"), |
| QObject::tr("%1-arf.xml").arg(mInputBaseName), |
| QObject::tr("Result DataStream / ARF (*.xml)"), 0 |
| |
| , QFileDialog::DontUseNativeDialog |
| |
| ); |
| |
| if (filename.isEmpty()) |
| return; |
| |
| QFile file(filename); |
| file.open(QIODevice::WriteOnly); |
| file.write(mARF); |
| file.close(); |
| } |