diff --git a/security/q-feeds-connector/src/opnsense/mvc/app/controllers/OPNsense/QFeeds/Api/SettingsController.php b/security/q-feeds-connector/src/opnsense/mvc/app/controllers/OPNsense/QFeeds/Api/SettingsController.php index b65b7b1a6..2a1b9ab52 100644 --- a/security/q-feeds-connector/src/opnsense/mvc/app/controllers/OPNsense/QFeeds/Api/SettingsController.php +++ b/security/q-feeds-connector/src/opnsense/mvc/app/controllers/OPNsense/QFeeds/Api/SettingsController.php @@ -110,6 +110,13 @@ class SettingsController extends ApiMutableModelControllerBase } } } + // Add license information from company_info if available + if (!empty($info['company_info'])) { + $stats['license'] = [ + 'name' => $info['company_info']['license_name'] ?? null, + 'expiry_date' => $info['company_info']['license_expiry_date'] ?? null + ]; + } } return $stats; } diff --git a/security/q-feeds-connector/src/opnsense/www/js/widgets/QFeeds.js b/security/q-feeds-connector/src/opnsense/www/js/widgets/QFeeds.js index bf5acbcb1..aa13fb5e8 100644 --- a/security/q-feeds-connector/src/opnsense/www/js/widgets/QFeeds.js +++ b/security/q-feeds-connector/src/opnsense/www/js/widgets/QFeeds.js @@ -71,6 +71,8 @@ export default class QFeeds extends BaseTableWidget { } let rows = []; let feeds = []; + let licenseInfoShown = false; + for (let feed of data.feeds) { feeds.push( ` ${feed.name}`, @@ -78,7 +80,19 @@ export default class QFeeds extends BaseTableWidget { `
  ${this.translations.next_update}: ${feed.next_update}
` ); if (feed.licensed) { - feeds.push(`
  ${this.translations.licensed}
`); + let licenseText = this.translations.licensed; + if (data.license && data.license.name) { + licenseText += ` (${data.license.name})`; + } + feeds.push(`
  ${licenseText}
`); + if (!licenseInfoShown && data.license && data.license.expiry_date) { + const expiryDate = new Date(data.license.expiry_date); + if (!isNaN(expiryDate.getTime())) { + const formattedDate = expiryDate.toLocaleDateString(); + feeds.push(`
  Expires: ${formattedDate}
`); + } + licenseInfoShown = true; + } } else { feeds.push(`
  ${this.translations.unlicensed}
`); }