diff --git a/plist b/plist index 0dc94bd02..50e2fa4de 100644 --- a/plist +++ b/plist @@ -551,6 +551,7 @@ /usr/local/opnsense/scripts/filter/list_table.py /usr/local/opnsense/scripts/filter/list_tables.py /usr/local/opnsense/scripts/filter/pfinfo.py +/usr/local/opnsense/scripts/firmware/audit.sh /usr/local/opnsense/scripts/firmware/changelog.sh /usr/local/opnsense/scripts/firmware/check.sh /usr/local/opnsense/scripts/firmware/hotfix.sh diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php b/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php index b5345cb2b..1c1543873 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php @@ -273,6 +273,26 @@ class FirmwareController extends ApiControllerBase return $response; } + /** + * run a security audit + * @return array status + * @throws \Exception + */ + public function auditAction() + { + $backend = new Backend(); + $response = array(); + + if ($this->request->isPost()) { + $response['status'] = 'ok'; + $response['msg_uuid'] = trim($backend->configdRun("firmware audit", true)); + } else { + $response['status'] = 'failure'; + } + + return $response; + } + /** * reinstall package * @param string $pkg_name package name to reinstall diff --git a/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt b/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt index 2fd147ffb..5508f6dae 100644 --- a/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt +++ b/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt @@ -63,6 +63,7 @@ POSSIBILITY OF SUCH DAMAGE. // unhide upgrade button $("#upgrade").attr("style",""); + $("#audit").attr("style","display:none"); // show upgrade list $('#update_status').hide(); @@ -91,6 +92,7 @@ POSSIBILITY OF SUCH DAMAGE. packagesInfo(false); } else { $("#upgrade").attr("style","display:none"); + $("#audit").attr("style",""); // update list so plugins sync as well (all) packagesInfo(true); @@ -106,6 +108,7 @@ POSSIBILITY OF SUCH DAMAGE. $('#update_status').show(); $('#updatetab > a').tab('show'); $('#updatestatus').html("{{ lang._('Upgrading...') }}"); + $("#audit").attr("style","display:none"); $("#upgrade").attr("style",""); $("#upgrade_progress").addClass("fa fa-spinner fa-pulse"); @@ -115,6 +118,24 @@ POSSIBILITY OF SUCH DAMAGE. }); } + /** + * perform audit, install poller to update status + */ + function audit() { + $.upgrade_action = 'audit'; + $('#updatelist').hide(); + $('#update_status').show(); + $('#updatetab > a').tab('show'); + $('#updatestatus').html("{{ lang._('Auditing...') }}"); + $("#audit").attr("style",""); + $("#audit_progress").addClass("fa fa-spinner fa-pulse"); + + ajaxCall('/api/core/firmware/audit', {}, function () { + $('#updatelist').empty(); + setTimeout(trackStatus, 500); + }); + } + /** * read license from backend */ @@ -218,9 +239,9 @@ POSSIBILITY OF SUCH DAMAGE. } /** - * handle update status + * handle check/audit/upgrade status */ - function trackStatus(){ + function trackStatus() { ajaxGet('/api/core/firmware/upgradestatus',{},function(data, status) { if (data['log'] != undefined) { $('#update_status').html(data['log']); @@ -228,12 +249,16 @@ POSSIBILITY OF SUCH DAMAGE. } if (data['status'] == 'done') { $("#upgrade_progress").removeClass("fa fa-spinner fa-pulse"); - if ($.upgrade_action != 'pkg') { - $('#updatestatus').html("{{ lang._('Upgrade done!') }}"); - } else { + $("#audit_progress").removeClass("fa fa-spinner fa-pulse"); + if ($.upgrade_action == 'pkg') { $('#updatestatus').html("{{ lang._('Package manager update done. Please check for more updates.') }}"); + } else if ($.upgrade_action == 'audit') { + $('#updatestatus').html("{{ lang._('Audit done.') }}"); + } else { + $('#updatestatus').html("{{ lang._('Upgrade done.') }}"); } $("#upgrade").attr("style","display:none"); + $("#audit").attr("style",""); packagesInfo(true); } else if (data['status'] == 'reboot') { BootstrapDialog.show({ @@ -418,6 +443,7 @@ POSSIBILITY OF SUCH DAMAGE. // link event handlers $('#checkupdate').click(updateStatus); $('#upgrade').click(upgrade_ui); + $('#audit').click(audit); // show upgrade message if there if ($('#message').html() != '') { $('#message').attr('style', ''); @@ -550,6 +576,7 @@ POSSIBILITY OF SUCH DAMAGE.