From: Stoiko Ivanov <s.ivanov@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH manager 3/3] gui: use acme plugin editor from proxmox-widget-toolkit
Date: Tue, 9 Nov 2021 17:36:33 +0100 [thread overview]
Message-ID: <20211109163633.1721670-7-s.ivanov@proxmox.com> (raw)
In-Reply-To: <20211109163633.1721670-1-s.ivanov@proxmox.com>
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
www/manager6/Makefile | 1 -
www/manager6/dc/ACMEClusterView.js | 13 +-
www/manager6/dc/ACMEPluginEdit.js | 223 -----------------------------
3 files changed, 10 insertions(+), 227 deletions(-)
delete mode 100644 www/manager6/dc/ACMEPluginEdit.js
diff --git a/www/manager6/Makefile b/www/manager6/Makefile
index 4011d4e5..302a106d 100644
--- a/www/manager6/Makefile
+++ b/www/manager6/Makefile
@@ -120,7 +120,6 @@ JSSRC= \
ha/StatusView.js \
dc/ACLView.js \
dc/ACMEClusterView.js \
- dc/ACMEPluginEdit.js \
dc/AuthEditBase.js \
dc/AuthEditAD.js \
dc/AuthEditLDAP.js \
diff --git a/www/manager6/dc/ACMEClusterView.js b/www/manager6/dc/ACMEClusterView.js
index d02aeef0..2237314b 100644
--- a/www/manager6/dc/ACMEClusterView.js
+++ b/www/manager6/dc/ACMEClusterView.js
@@ -130,7 +130,11 @@ Ext.define('PVE.dc.ACMEPluginView', {
addPlugin: function() {
let me = this;
- Ext.create('PVE.dc.ACMEPluginEditor', {
+ let acmeUrl = '/cluster/acme/';
+ Ext.create('Proxmox.window.ACMEPluginEdit', {
+ onlineHelp: 'sysadmin_certs_acme_plugins',
+ acmeUrl: acmeUrl,
+ url: `${acmeUrl}/plugins/`,
isCreate: true,
apiCallDone: function() {
me.reload();
@@ -144,8 +148,11 @@ Ext.define('PVE.dc.ACMEPluginView', {
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}`,
+ let acmeUrl = '/cluster/acme/';
+ Ext.create('Proxmox.window.ACMEPluginEdit', {
+ onlineHelp: 'sysadmin_certs_acme_plugins',
+ acmeUrl: acmeUrl,
+ url: `${acmeUrl}/plugins/${plugin}`,
apiCallDone: function() {
me.reload();
},
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.30.2
prev parent reply other threads:[~2021-11-09 16:36 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-09 16:36 [pve-devel] [PATCH manager/proxmox-acme/pwt 0/3] fix #3536 add http proxy support for acme Stoiko Ivanov
2021-11-09 16:36 ` [pve-devel] [PATCH proxmox-acme 1/2] add support for proxies Stoiko Ivanov
2021-11-09 17:05 ` [pve-devel] applied: " Thomas Lamprecht
2021-11-09 16:36 ` [pve-devel] [PATCH proxmox-acme 2/2] dns-challenge: add 'use-proxy' property Stoiko Ivanov
2021-11-09 17:09 ` [pve-devel] applied: " Thomas Lamprecht
2021-11-09 16:36 ` [pve-devel] [PATCH widget-toolkit 1/1] acmeplugin: add use-proxy checkbox Stoiko Ivanov
2021-11-09 16:36 ` [pve-devel] [PATCH manager 1/3] api: acme: set http_proxy if configured in datacenter.cfg Stoiko Ivanov
2021-11-09 17:08 ` Thomas Lamprecht
2021-11-09 16:36 ` [pve-devel] [PATCH manager 2/3] api: acme: dns-plugin: conditionally pass proxy to acme.sh wrapper Stoiko Ivanov
2021-11-09 16:36 ` Stoiko Ivanov [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20211109163633.1721670-7-s.ivanov@proxmox.com \
--to=s.ivanov@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.