pmg-gui/js/DKIMSettings.js
Dominik Csapak 693821d36b dkim selector view: fix viewing larger DKIM TXT records
It seems the 'grow' feature of the textarea only works properly on user
input, not when automatically filling it with data. So instead of trying
to do that, which only ever clipped the record if it was too large,
simply use a fixed size that is enough for 4096 bit sized keys and show
a scrollbar for larger ones.

With having a fixed height, and horizontal resizing a textarea also not
working properly in an edit window, prevent the whole window from
resizing.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
2025-02-26 17:19:47 +01:00

243 lines
5.2 KiB
JavaScript

Ext.define('PMG.DKIMEnableEdit', {
extend: 'Proxmox.window.Edit',
xtype: 'pmgDKIMEnableEdit',
items: [
{
xtype: 'displayfield',
userCls: 'pmx-hint',
value: gettext('You need to create a Selector before enabling DKIM Signing'),
hidden: true,
},
{
xtype: 'proxmoxcheckbox',
name: 'dkim_sign',
uncheckedValue: 0,
defaultValue: 0,
checked: false,
deleteDefaultValue: false,
fieldLabel: gettext('Sign Outgoing Mails'),
},
],
listeners: {
'show': function() {
var me = this;
var disablefn = function(errormsg) {
Ext.Msg.alert(gettext('Error'), errormsg);
me.down('displayfield').setVisible(true);
me.down('proxmoxcheckbox').setDisabled(true);
me.close();
};
Proxmox.Utils.API2Request({
url: '/config/dkim/selector',
method: 'GET',
failure: function(response, opts) {
disablefn(response.htmlStatus);
},
success: function(response, opts) {
if (!Ext.isDefined(response.result.data.record)) {
disablefn(gettext('Could not read private key - please create a selector first!'));
}
},
});
},
},
});
Ext.define('PMG.SelectorViewer', {
extend: 'Proxmox.window.Edit',
xtype: 'pmgDKIMSelectorView',
url: '/config/dkim/selector',
title: gettext('Selector'),
width: 800,
resizable: false,
items: [
{
xtype: 'displayfield',
fieldLabel: gettext('Selector'),
name: 'selector',
},
{
xtype: 'displayfield',
fieldLabel: gettext('Key Size'),
name: 'keysize',
},
{
xtype: 'textarea',
editable: false,
height: 220,
fieldLabel: gettext('DNS TXT Record'),
name: 'record',
value: 'Could not read private key!',
},
],
initComponent: function() {
var me = this;
me.callParent();
// hide OK/Reset button, because we just want to show data
me.down('toolbar[dock=bottom]').setVisible(false);
},
});
Ext.define('PMG.SelectorList', {
extend: 'Ext.form.ComboBox',
xtype: 'pmgDKIMSelectorList',
queryMode: 'local',
store: {
fields: ['selector'],
filterOnLoad: true,
proxy: {
type: 'proxmox',
url: '/api2/json/config/dkim/selectors',
},
autoLoad: true,
sorters: [
{
property: 'selector',
direction: 'ASC',
},
],
},
valueField: 'selector',
displayField: 'selector',
allowBlank: false,
});
Ext.define('PMG.DKIMSettings', {
extend: 'Proxmox.grid.ObjectGrid',
xtype: 'pmgDKIM',
monStoreErrors: true,
dkimdomainTextHash: {
envelope: gettext('Envelope'),
header: gettext('Header'),
},
initComponent: function() {
var me = this;
me.rows = {};
var enable_sign_text = gettext('Enable DKIM Signing');
me.rows.dkim_sign = {
required: true,
defaultValue: 0,
header: enable_sign_text,
renderer: Proxmox.Utils.format_boolean,
editor: {
xtype: 'pmgDKIMEnableEdit',
subject: enable_sign_text,
},
};
var selector_text = gettext('Selector');
me.rows.dkim_selector = {
required: true,
header: selector_text,
editor: {
xtype: 'proxmoxWindowEdit',
subject: selector_text,
isCreate: true,
method: 'POST',
url: '/config/dkim/selector',
submitText: gettext('Update'),
items: [
{
xtype: 'displayfield',
name: 'warning',
userCls: 'pmx-hint',
value: gettext('Warning: You need to update the _domainkey DNS records of all signed domains!'),
},
{
xtype: 'pmgDKIMSelectorList',
fieldLabel: selector_text,
name: 'selector',
},
{
xtype: 'proxmoxKVComboBox',
fieldLabel: gettext('Key Size'),
name: 'keysize',
value: '2048',
allowBlank: false,
deleteEmpty: false,
required: true,
comboItems: [
['1024', '1024'],
['2048', '2048'],
['4096', '4096'],
['8192', '8192'],
],
},
{
xtype: 'proxmoxcheckbox',
name: 'force',
fieldLabel: gettext('Overwrite existing file'),
},
],
},
};
let render_dkimdomain = value => me.dkimdomainTextHash[value] || value;
me.add_combobox_row('dkim-use-domain', gettext('Signing Domain Source'), {
renderer: render_dkimdomain,
defaultValue: 'envelope',
comboItems: [
['envelope', render_dkimdomain('envelope')],
['header', render_dkimdomain('header')]],
});
me.add_boolean_row('dkim_sign_all_mail', gettext('Sign all Outgoing Mail'));
var baseurl = '/config/admin';
me.selModel = Ext.create('Ext.selection.RowModel', {});
Ext.apply(me, {
tbar: [{
text: gettext('View DNS Record'),
xtype: 'proxmoxButton',
disabled: true,
handler: function() {
var win = Ext.create('PMG.SelectorViewer', {});
win.load();
win.show();
},
selModel: me.selModel,
},
{
text: gettext('Edit'),
xtype: 'proxmoxButton',
disabled: true,
handler: function() { me.run_editor(); },
selModel: me.selModel,
}],
url: '/api2/json' + baseurl,
editorConfig: {
url: '/api2/extjs' + baseurl,
onlineHelp: 'pmgconfig_mailproxy_dkim',
},
interval: 5000,
cwidth1: 200,
listeners: {
itemdblclick: me.run_editor,
},
});
me.callParent();
me.on('activate', me.rstore.startUpdate);
me.on('destroy', me.rstore.stopUpdate);
me.on('deactivate', me.rstore.stopUpdate);
},
});