[pve-devel] [PATCH manager 1/2] fix #5093: webui: acme: custom directory option

Mira Limbeck m.limbeck at proxmox.com
Wed Apr 17 16:34:08 CEST 2024



On 1/16/24 15:33, Folke Gleumes wrote:
> This patch allows the user to set a custom ACME directory by providing
> a 'Custom' option in the directory dropdown. This in turn reveals an
> input for the url. When using a custom directory the directory has to
> be manually queried via button press to prevent from spamming the
> directory on every input.
> 
> Signed-off-by: Folke Gleumes <f.gleumes at proxmox.com>
> ---
>  www/manager6/node/ACME.js | 140 +++++++++++++++++++++++++++++---------
>  1 file changed, 107 insertions(+), 33 deletions(-)
> 
> diff --git a/www/manager6/node/ACME.js b/www/manager6/node/ACME.js
> index 21137b1a..5b71778a 100644
> --- a/www/manager6/node/ACME.js
> +++ b/www/manager6/node/ACME.js
> @@ -10,6 +10,14 @@ Ext.define('PVE.node.ACMEAccountCreate', {
>      url: '/cluster/acme/account',
>      showTaskViewer: true,
>      defaultExists: false,
> +    referenceHolder: true,
> +    onlineHelp: "sysadmin_certs_acme_account",
> +
> +    viewModel: {
> +	data: {
> +	    customDirectory: false,
> +	},
> +    },
>  
>      items: [
>  	{
> @@ -30,12 +38,17 @@ Ext.define('PVE.node.ACMEAccountCreate', {
>  	},
>  	{
>  	    xtype: 'proxmoxComboGrid',
> -	    name: 'directory',
> -	    allowBlank: false,
> +	    notFoundIsValid: true,
> +	    isFormField: false,
>  	    valueField: 'url',
>  	    displayField: 'name',
>  	    fieldLabel: gettext('ACME Directory'),
>  	    store: {
> +		listeners: {
> +		    'load': function() {
> +			this.add({ name: gettext("Custom"), url: '' });
> +		    },
> +		},
>  		autoLoad: true,
>  		fields: ['name', 'url'],
>  		idProperty: ['name'],
> @@ -43,10 +56,6 @@ Ext.define('PVE.node.ACMEAccountCreate', {
>  		    type: 'proxmox',
>  		    url: '/api2/json/cluster/acme/directories',
>  		},
> -		sorters: {
> -		    property: 'name',
> -		    direction: 'ASC',
> -		},
>  	    },
>  	    listConfig: {
>  		columns: [
> @@ -64,41 +73,93 @@ Ext.define('PVE.node.ACMEAccountCreate', {
>  	    },
>  	    listeners: {
>  		change: function(combogrid, value) {
> -		    var me = this;
> -		    if (!value) {
> -			return;
> -		    }
> +		    let me = this;
>  
> -		    var disp = me.up('window').down('#tos_url_display');
> -		    var field = me.up('window').down('#tos_url');
> -		    var checkbox = me.up('window').down('#tos_checkbox');
> +		    let vm = me.up('window').getViewModel();
> +		    let dirField = me.up('window').lookupReference('directoryInput');
> +		    let tosButton = me.up('window').lookupReference('queryTos');
>  
> -		    disp.setValue(gettext('Loading'));
> -		    field.setValue(undefined);
> -		    checkbox.setValue(undefined);
> -		    checkbox.setHidden(true);
> +		    let isCustom = combogrid.getSelection().get('name') === gettext("Custom");
> +		    vm.set('customDirectory', isCustom);
>  
> -		    Proxmox.Utils.API2Request({
> -			url: '/cluster/acme/meta',
> -			method: 'GET',
> -			params: {
> -			    directory: value,
> +		    dirField.setValue(value);
> +
> +		    if (!isCustom) {
> +			tosButton.click();
> +		    } else {
> +			me.up('window').clearToSFields();
> +		    }
> +		},
> +	    },
> +	},
> +	{
> +	    xtype: 'fieldcontainer',
> +	    layout: 'hbox',
> +	    fieldLabel: gettext('URL'),
> +	    bind: {
> +		hidden: '{!customDirectory}',
> +	    },
> +	    items: [
> +		{
> +		    xtype: 'proxmoxtextfield',
> +		    name: 'directory',
> +		    reference: 'directoryInput',
> +		    flex: 1,
> +		    allowBlank: false,
> +		    listeners: {
> +			change: function(textbox, value) {
> +			    let me = this;
> +			    me.up('window').clearToSFields();
>  			},
> -			success: function(response, opt) {
> -			    if (response.result.data.termsOfService) {
> -				field.setValue(response.result.data.termsOfService);
> -				disp.setValue(response.result.data.termsOfService);
> -				checkbox.setHidden(false);
> +		    },
> +		},
> +		{
> +		    xtype: 'proxmoxButton',
> +		    margin: '0 0 0 5',
> +		    reference: 'queryTos',
> +		    text: gettext('Query URL'),
> +		    listeners: {
> +			click: function(button) {
> +			    let me = this;
> +
> +			    let w = me.up('window');
> +			    let disp = w.down('#tos_url_display');
> +			    let field = w.down('#tos_url');
> +			    let checkbox = w.down('#tos_checkbox');
> +			    let value = w.lookupReference('directoryInput').getValue();
> +			    w.clearToSFields();
> +
> +			    if (!value) {
> +				return;
>  			    } else {
> -				disp.setValue(undefined);
> +				disp.setValue(gettext("Loading"));
>  			    }
> +
> +			    Proxmox.Utils.API2Request({
> +				url: '/cluster/acme/meta',
> +				method: 'GET',
> +				params: {
> +				    directory: value,
> +				},
> +				success: function(response, opt) {
> +				    if (response.result.data.termsOfService) {
> +					field.setValue(response.result.data.termsOfService);
> +					disp.setValue(response.result.data.termsOfService);
> +					checkbox.setHidden(false);
> +				    } else {
> +					checkbox.setValue(false);
> +					disp.setValue("No terms of service agreement required");
> +				    }
> +				},
> +				failure: function(response, opt) {
> +				    disp.setValue(undefined);
> +				    Ext.Msg.alert(gettext('Error'), response.htmlStatus);
> +				},
> +			    });
>  			},
> -			failure: function(response, opt) {
> -			    Ext.Msg.alert(gettext('Error'), response.htmlStatus);
> -			},
> -		    });
> +		    },
>  		},
> -	    },
> +	    ],
>  	},
>  	{
>  	    xtype: 'displayfield',
> @@ -125,6 +186,19 @@ Ext.define('PVE.node.ACMEAccountCreate', {
>  	},
>      ],
>  
> +    clearToSFields: function() {
> +	let me = this;
> +
> +	let disp = me.down('#tos_url_display');
> +	let field = me.down('#tos_url');
> +	let checkbox = me.down('#tos_checkbox');
> +
> +	disp.setValue("Terms of service not fetched yet");
> +	field.setValue(undefined);
> +	checkbox.setValue(undefined);
> +	checkbox.setHidden(true);
> +    },
> +
>  });
>  
>  Ext.define('PVE.node.ACMEAccountView', {

Tested this patch series in a Debian 12 container with Pebble 2.4
installed via the Debian Bookworm repositories.


The behavior of the combobox changed with this patch. The combobox now
shows an `x` to clear it, but doesn't actually clear the selection.
Instead it always sets it to `Custom`.


Account creation worked like a charm using a custom directory and EAB
(with the 2nd patch).
Other than the combobox issue above, consider this and the 2nd patch:

Tested-by: Mira Limbeck <m.limbeck at proxmox.com>




More information about the pve-devel mailing list