diff --git a/plist b/plist index e9f4f2481..b3870dc40 100644 --- a/plist +++ b/plist @@ -556,6 +556,7 @@ /usr/local/opnsense/scripts/firmware/hotfix.sh /usr/local/opnsense/scripts/firmware/install.sh /usr/local/opnsense/scripts/firmware/launcher.sh +/usr/local/opnsense/scripts/firmware/license.sh /usr/local/opnsense/scripts/firmware/lock.sh /usr/local/opnsense/scripts/firmware/reinstall.sh /usr/local/opnsense/scripts/firmware/remove.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 d71f74b48..b5345cb2b 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/FirmwareController.php @@ -183,6 +183,34 @@ class FirmwareController extends ApiControllerBase return $response; } + /** + * Retrieve specific license for package in text format + * @param string $package package to retrieve + * @return array with all possible licenses + * @throws \Exception + */ + public function licenseAction($package) + { + $this->sessionClose(); // long running action, close session + $backend = new Backend(); + $response = array(); + + if ($this->request->isPost()) { + // sanitize package name + $filter = new \Phalcon\Filter(); + $filter->add('scrub', function ($value) { + return preg_replace('/[^0-9a-zA-Z]/', '', $value); + }); + $package = $filter->sanitize($package, 'scrub'); + $text = trim($backend->configdRun(sprintf('firmware license %s', $package))); + if (!empty($text)) { + $response['license'] = $text; + } + } + + return $response; + } + /** * perform reboot * @return array status @@ -428,7 +456,7 @@ class FirmwareController extends ApiControllerBase { $this->sessionClose(); // long running action, close session - $keys = array('name', 'version', 'comment', 'flatsize', 'locked'); + $keys = array('name', 'version', 'comment', 'flatsize', 'locked', 'license'); $backend = new Backend(); $response = array(); diff --git a/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt b/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt index d16777f50..2fd147ffb 100644 --- a/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt +++ b/src/opnsense/mvc/app/views/OPNsense/Core/firmware.volt @@ -115,6 +115,30 @@ POSSIBILITY OF SUCH DAMAGE. }); } + /** + * read license from backend + */ + function license(package) + { + ajaxCall('/api/core/firmware/license/' + package, {}, function (data, status) { + var license = "{{ lang._('Sorry, the package does not have an associated license file.') }}"; + if (data['license'] != undefined) { + license = data['license']; + } + BootstrapDialog.show({ + type:BootstrapDialog.TYPE_INFO, + title: "{{ lang._('License details') }}", + message: license, + buttons: [{ + label: "{{ lang._('Close') }}", + action: function(dialogRef){ + dialogRef.close(); + } + }] + }); + }); + } + /** * read changelog from backend */ @@ -246,10 +270,10 @@ POSSIBILITY OF SUCH DAMAGE. $("#packageslist").html("{{ lang._('Name') }}" + "{{ lang._('Version') }}{{ lang._('Size') }}" + - "{{ lang._('Comment') }}"); + "{{ lang._('License') }}{{ lang._('Comment') }}"); $("#pluginlist").html("{{ lang._('Name') }}" + "{{ lang._('Version') }}{{ lang._('Size') }}" + - "{{ lang._('Comment') }}"); + "{{ lang._('License') }}{{ lang._('Comment') }}"); var local_count = 0; var remote_count = 0; @@ -268,8 +292,12 @@ POSSIBILITY OF SUCH DAMAGE. '' + row['name'] + '' + '' + row['version'] + '' + '' + row['flatsize'] + '' + + '' + row['license'] + '' + '' + row['comment'] + '' + '' + + ' ' + ' ' + (row['locked'] === '1' ? @@ -299,8 +327,12 @@ POSSIBILITY OF SUCH DAMAGE. '' + '' + row['name'] + orphaned_text + '' + '' + row['version'] + '' + '' + row['flatsize'] + '' + + '' + row['license'] + '' + '' + row['comment'] + '' + - '' + (row['installed'] == "1" ? + ' ' + + (row['installed'] == "1" ? '