From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id CE7B29F24 for ; Tue, 29 Aug 2023 13:01:27 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id AA7BE8311 for ; Tue, 29 Aug 2023 13:00:57 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Tue, 29 Aug 2023 13:00:56 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 8CABD4731B for ; Tue, 29 Aug 2023 13:00:56 +0200 (CEST) From: Filip Schauer To: pve-devel@lists.proxmox.com Date: Tue, 29 Aug 2023 13:00:49 +0200 Message-Id: <20230829110049.39854-1-f.schauer@proxmox.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.000 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [definition.name, values.data, values.id] Subject: [pve-devel] [PATCH manager] ui: Remove pveACMEPluginView in favor of pmxACMEPluginView X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Aug 2023 11:01:27 -0000 Remove pveACMEPluginView and use the ACMEPluginView from the proxmox-widget-toolkit instead. This leaves pveACMEPluginEditor unused, so remove it as well. Signed-off-by: Filip Schauer --- www/manager6/dc/ACMEClusterView.js | 100 +------------ www/manager6/dc/ACMEPluginEdit.js | 223 ----------------------------- 2 files changed, 2 insertions(+), 321 deletions(-) delete mode 100644 www/manager6/dc/ACMEPluginEdit.js diff --git a/www/manager6/dc/ACMEClusterView.js b/www/manager6/dc/ACMEClusterView.js index d02aeef0..3d7adbf8 100644 --- a/www/manager6/dc/ACMEClusterView.js +++ b/www/manager6/dc/ACMEClusterView.js @@ -119,103 +119,6 @@ Ext.define('PVE.dc.ACMEAccountView', { }, }); -Ext.define('PVE.dc.ACMEPluginView', { - extend: 'Ext.grid.Panel', - alias: 'widget.pveACMEPluginView', - - title: gettext('Challenge Plugins'), - - controller: { - xclass: 'Ext.app.ViewController', - - addPlugin: function() { - let me = this; - Ext.create('PVE.dc.ACMEPluginEditor', { - isCreate: true, - apiCallDone: function() { - me.reload(); - }, - }).show(); - }, - - editPlugin: function() { - let me = this; - let view = me.getView(); - let selection = view.getSelection(); - if (selection.length < 1) return; - let plugin = selection[0].data.plugin; - Ext.create('PVE.dc.ACMEPluginEditor', { - url: `/cluster/acme/plugins/${plugin}`, - apiCallDone: function() { - me.reload(); - }, - }).show(); - }, - - reload: function() { - let me = this; - let view = me.getView(); - view.getStore().rstore.load(); - }, - }, - - minHeight: 150, - emptyText: gettext('No Plugins configured'), - - columns: [ - { - dataIndex: 'plugin', - text: gettext('Plugin'), - renderer: Ext.String.htmlEncode, - flex: 1, - }, - { - dataIndex: 'api', - text: 'API', - renderer: Ext.String.htmlEncode, - flex: 1, - }, - ], - - tbar: [ - { - xtype: 'proxmoxButton', - text: gettext('Add'), - handler: 'addPlugin', - selModel: false, - }, - { - xtype: 'proxmoxButton', - text: gettext('Edit'), - handler: 'editPlugin', - disabled: true, - }, - { - xtype: 'proxmoxStdRemoveButton', - baseurl: '/cluster/acme/plugins', - callback: 'reload', - }, - ], - - listeners: { - itemdblclick: 'editPlugin', - }, - - store: { - type: 'diff', - autoDestroy: true, - autoDestroyRstore: true, - rstore: { - type: 'update', - storeid: 'pve-acme-plugins', - model: 'pve-acme-plugins', - autoStart: true, - filters: item => !!item.data.api, - }, - sorters: 'plugin', - }, -}); - Ext.define('PVE.dc.ACMEClusterView', { extend: 'Ext.panel.Panel', alias: 'widget.pveACMEClusterView', @@ -231,7 +134,8 @@ Ext.define('PVE.dc.ACMEClusterView', { { region: 'center', border: false, - xtype: 'pveACMEPluginView', + xtype: 'pmxACMEPluginView', + acmeUrl: '/config/acme', }, ], }); diff --git a/www/manager6/dc/ACMEPluginEdit.js b/www/manager6/dc/ACMEPluginEdit.js deleted file mode 100644 index 570b4dd2..00000000 --- a/www/manager6/dc/ACMEPluginEdit.js +++ /dev/null @@ -1,223 +0,0 @@ -Ext.define('PVE.dc.ACMEPluginEditor', { - extend: 'Proxmox.window.Edit', - xtype: 'pveACMEPluginEditor', - mixins: ['Proxmox.Mixin.CBind'], - - onlineHelp: 'sysadmin_certs_acme_plugins', - - isAdd: true, - isCreate: false, - - width: 550, - url: '/cluster/acme/plugins/', - - subject: 'ACME DNS Plugin', - - items: [ - { - xtype: 'inputpanel', - // we dynamically create fields from the given schema - // things we have to do here: - // * save which fields we created to remove them again - // * split the data from the generic 'data' field into the boxes - // * on deletion collect those values again - // * save the original values of the data field - createdFields: {}, - createdInitially: false, - originalValues: {}, - createSchemaFields: function(schema) { - let me = this; - // we know where to add because we define it right below - let container = me.down('container'); - let datafield = me.down('field[name=data]'); - let hintfield = me.down('field[name=hint]'); - if (!me.createdInitially) { - [me.originalValues] = PVE.Parser.parseACMEPluginData(datafield.getValue()); - } - - // collect values from custom fields and add it to 'data'', - // then remove the custom fields - let data = []; - for (const [name, field] of Object.entries(me.createdFields)) { - let value = field.getValue(); - if (value !== undefined && value !== null && value !== '') { - data.push(`${name}=${value}`); - } - container.remove(field); - } - let datavalue = datafield.getValue(); - if (datavalue !== undefined && datavalue !== null && datavalue !== '') { - data.push(datavalue); - } - datafield.setValue(data.join('\n')); - - me.createdFields = {}; - - if (typeof schema.fields !== 'object') { - schema.fields = {}; - } - // create custom fields according to schema - let gotSchemaField = false; - let cmp = (a, b) => a[0].localeCompare(b[0]); - for (const [name, definition] of Object.entries(schema.fields).sort(cmp)) { - let xtype; - switch (definition.type) { - case 'string': - xtype = 'proxmoxtextfield'; - break; - case 'integer': - xtype = 'proxmoxintegerfield'; - break; - case 'number': - xtype = 'numberfield'; - break; - default: - console.warn(`unknown type '${definition.type}'`); - xtype = 'proxmoxtextfield'; - break; - } - - let label = name; - if (typeof definition.name === "string") { - label = definition.name; - } - - let field = Ext.create({ - xtype, - name: `custom_${name}`, - fieldLabel: label, - width: '100%', - labelWidth: 150, - labelSeparator: '=', - emptyText: definition.default || '', - autoEl: definition.description ? { - tag: 'div', - 'data-qtip': definition.description, - } : undefined, - }); - - me.createdFields[name] = field; - container.add(field); - gotSchemaField = true; - } - datafield.setHidden(gotSchemaField); // prefer schema-fields - - if (schema.description) { - hintfield.setValue(schema.description); - hintfield.setHidden(false); - } else { - hintfield.setValue(''); - hintfield.setHidden(true); - } - - // parse data from field and set it to the custom ones - let extradata = []; - [data, extradata] = PVE.Parser.parseACMEPluginData(datafield.getValue()); - for (const [key, value] of Object.entries(data)) { - if (me.createdFields[key]) { - me.createdFields[key].setValue(value); - me.createdFields[key].originalValue = me.originalValues[key]; - } else { - extradata.push(`${key}=${value}`); - } - } - datafield.setValue(extradata.join('\n')); - if (!me.createdInitially) { - datafield.resetOriginalValue(); - me.createdInitially = true; // save that we initally set that - } - }, - onGetValues: function(values) { - let me = this; - let win = me.up('pveACMEPluginEditor'); - if (win.isCreate) { - values.id = values.plugin; - values.type = 'dns'; // the only one for now - } - delete values.plugin; - - PVE.Utils.delete_if_default(values, 'validation-delay', '30', win.isCreate); - - let data = ''; - for (const [name, field] of Object.entries(me.createdFields)) { - let value = field.getValue(); - if (value !== null && value !== undefined && value !== '') { - data += `${name}=${value}\n`; - } - delete values[`custom_${name}`]; - } - values.data = Ext.util.Base64.encode(data + values.data); - return values; - }, - items: [ - { - xtype: 'pmxDisplayEditField', - cbind: { - editable: (get) => get('isCreate'), - submitValue: (get) => get('isCreate'), - }, - editConfig: { - flex: 1, - xtype: 'proxmoxtextfield', - allowBlank: false, - }, - name: 'plugin', - labelWidth: 150, - fieldLabel: gettext('Plugin ID'), - }, - { - xtype: 'proxmoxintegerfield', - name: 'validation-delay', - labelWidth: 150, - fieldLabel: gettext('Validation Delay'), - emptyText: 30, - cbind: { - deleteEmpty: '{!isCreate}', - }, - minValue: 0, - maxValue: 48*60*60, - }, - { - xtype: 'pveACMEApiSelector', - name: 'api', - labelWidth: 150, - listeners: { - change: function(selector) { - let schema = selector.getSchema(); - selector.up('inputpanel').createSchemaFields(schema); - }, - }, - }, - { - xtype: 'textarea', - fieldLabel: gettext('API Data'), - labelWidth: 150, - name: 'data', - }, - { - xtype: 'displayfield', - fieldLabel: gettext('Hint'), - labelWidth: 150, - name: 'hint', - hidden: true, - }, - ], - }, - ], - - initComponent: function() { - var me = this; - - me.callParent(); - - if (!me.isCreate) { - me.load({ - success: function(response, opts) { - me.setValues(response.result.data); - }, - }); - } else { - me.method = 'POST'; - } - }, -}); -- 2.39.2