From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [IPv6:2a0f:8001:1:32::40]) by lore.proxmox.com (Postfix) with ESMTPS id 528411FF0B0 for ; Tue, 27 Oct 2026 11:14:26 +0100 (CET) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 34EE921765; Tue, 27 Oct 2026 11:13:33 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=genua.de; s=202307; t=1793095952; bh=ZKVoRNzNnBSG7JMBnYqkMDYkEVmKl6QyJlYkul53Q+o=; h=Date:From:To:Subject:References:In-Reply-To:From; b=x8Isy8H6NCGb3kStdTwl2hC6kJ3q+u6jYYOJ40WaMjaF7sVbpfeFJN3k99o4Xj2qN Oq9oy0UI+vVGm4op8sHwJOZkQ3f0csrqLF3zwxY/9Ufug0wsHn5fEm/6cHufLzTP2b +epKCApEIOpD8moP5GRV9M2JWrHjI4ZBBeQDP6RpnXz669lkkQWUPJ+VFPzucvyK9v iSXlrv/i46Kxu20oaBcunMSfCMsGvSsl1kRyoj+pKjxZ3GgZ6gM6CIlzX81xN0O8sJ ij7x7nTFFkyykFuAMyuDEKsutMM3fTyYOIxiok+BQyrRmY4QEx3Vmw7bTsDUkqWxJV EpTQUVlOlFmpg== Date: Tue, 27 Oct 2026 11:12:30 +0100 From: Christian Ludwig To: Subject: [PATCH pve-manager v3 14/19] ui: storage: add efi-firmware content type support Message-ID: References: MIME-Version: 1.0 In-Reply-To: X-Originating-IP: [192.168.217.185] X-ClientProxiedBy: kch1-mta09.win.genua.de (10.208.16.109) To kch1-mta07.win.genua.de (10.208.16.107) Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline X-SPAM-LEVEL: Spam detection results: 0 AWL 0.063 Adjusted score from AWL reputation of From: address DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain DMARC_PASS -0.1 DMARC pass policy SPF_HELO_PASS -0.001 SPF: HELO matches SPF record SPF_PASS -0.001 SPF: sender matches SPF record UNPARSEABLE_RELAY 0.001 Informational: message has unparseable relay lines Message-ID-Hash: UTPGCKQIMVQ27R4VZJJFAZYCX3HXR26P X-Message-ID-Hash: UTPGCKQIMVQ27R4VZJJFAZYCX3HXR26P X-MailFrom: christian_ludwig@genua.de X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Add the 'efi-firmware' storage content type to the Web UI: - Utils.js: add display name for the content type - ContentTypeSelector: include in the default content type list - CephFSEdit: include in its explicit content type list, the backend CephFS plugin allows the type as well - Browser: add a tab for browsing and uploading firmware images; the format is always 'raw' for this type, so drop that column - UploadToStorage: only accept files with the '.fd' extension, like the backend does Signed-off-by: Christian Ludwig --- www/manager6/Utils.js | 1 + www/manager6/form/ContentTypeSelector.js | 11 ++++++++++- www/manager6/storage/Browser.js | 14 ++++++++++++++ www/manager6/storage/CephFSEdit.js | 2 +- www/manager6/window/UploadToStorage.js | 1 + 5 files changed, 27 insertions(+), 2 deletions(-) diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js index 8b99371d..e83d87ff 100644 --- a/www/manager6/Utils.js +++ b/www/manager6/Utils.js @@ -740,6 +740,7 @@ Ext.define('PVE.Utils', { rootdir: gettext('Container'), snippets: gettext('Snippets'), import: gettext('Import'), + 'efi-firmware': gettext('EFI Firmware'), }, // volume can be a full volume info object, in which case the format parameter is ignored, or diff --git a/www/manager6/form/ContentTypeSelector.js b/www/manager6/form/ContentTypeSelector.js index 60532251..b33eb124 100644 --- a/www/manager6/form/ContentTypeSelector.js +++ b/www/manager6/form/ContentTypeSelector.js @@ -10,7 +10,16 @@ Ext.define('PVE.form.ContentTypeSelector', { me.comboItems = []; if (me.cts === undefined) { - me.cts = ['images', 'iso', 'vztmpl', 'backup', 'rootdir', 'snippets', 'import']; + me.cts = [ + 'images', + 'iso', + 'vztmpl', + 'backup', + 'rootdir', + 'snippets', + 'import', + 'efi-firmware', + ]; } Ext.Array.each(me.cts, function (ct) { diff --git a/www/manager6/storage/Browser.js b/www/manager6/storage/Browser.js index d0237948..611c0009 100644 --- a/www/manager6/storage/Browser.js +++ b/www/manager6/storage/Browser.js @@ -189,6 +189,20 @@ Ext.define('PVE.storage.Browser', { pluginType: plugin, }); } + if (contents.includes('efi-firmware')) { + me.items.push({ + xtype: 'pveStorageContentView', + title: gettext('EFI Firmware'), + iconCls: 'fa fa-microchip', + itemId: 'contentEfiFirmware', + content: 'efi-firmware', + showColumns: ['name', 'date', 'size'], + pluginType: plugin, + enableUploadButton: enableUpload, + enableDownloadUrlButton: enableDownloadUrl, + useUploadButton: true, + }); + } } if (caps.storage['Permissions.Modify']) { diff --git a/www/manager6/storage/CephFSEdit.js b/www/manager6/storage/CephFSEdit.js index db54df87..3b7a49f3 100644 --- a/www/manager6/storage/CephFSEdit.js +++ b/www/manager6/storage/CephFSEdit.js @@ -95,7 +95,7 @@ Ext.define('PVE.storage.CephFSInputPanel', { me.column2 = [ { xtype: 'pveContentTypeSelector', - cts: ['backup', 'iso', 'vztmpl', 'snippets', 'import'], + cts: ['backup', 'iso', 'vztmpl', 'snippets', 'import', 'efi-firmware'], fieldLabel: gettext('Content'), name: 'content', value: 'backup', diff --git a/www/manager6/window/UploadToStorage.js b/www/manager6/window/UploadToStorage.js index a5fa1773..5b75555d 100644 --- a/www/manager6/window/UploadToStorage.js +++ b/www/manager6/window/UploadToStorage.js @@ -12,6 +12,7 @@ Ext.define('PVE.window.UploadToStorage', { import: ['.ova', '.qcow2', '.raw', '.vmdk'], iso: ['.img', '.iso'], vztmpl: ['.tar.gz', '.tar.xz', '.tar.zst'], + 'efi-firmware': ['.fd'], }, // accepted for file selection, but the extension does not tell the image format, so the user -- 2.34.1