pmg-gui/js/Transport.js
Julian Zehnter d895a7463c Feature #2438 add support for lmtp delivery to downstream servers
new feature lmtp support for simplifying setups
with lmtp capable downstream servers (e.g. dovecot)
Postfix support lmtp out of the box and can now deliver
mails directly to internal mailbox servers without
one more smtp connection

extending the gui code for new lmtp option:
MailProxyConfiguration & MailProxyConfiguration:Transport:
Adding combobox "smtp" / "lmtp" as a new option
Generalizing some "SMTP" keywords

Signed-off-by: Julian Zehnter <pmg-devel@j-z.it>
2020-01-10 11:58:29 +01:00

203 lines
4.0 KiB
JavaScript

/*global Proxmox*/
Ext.define('pmg-transport', {
extend: 'Ext.data.Model',
fields: [ 'domain', 'host', 'protocol', { name: 'port', type: 'integer' },
{ name: 'use_mx', type: 'boolean' }, 'comment' ],
proxy: {
type: 'proxmox',
url: "/api2/json/config/transport"
},
idProperty: 'domain'
});
Ext.define('PMG.Transport', {
extend: 'Ext.grid.GridPanel',
alias: ['widget.pmgTransport'],
initComponent : function() {
var me = this;
var store = new Ext.data.Store({
model: 'pmg-transport',
sorters: {
property: 'domain',
order: 'DESC'
}
});
var reload = function() {
store.load();
};
me.selModel = Ext.create('Ext.selection.RowModel', {});
var remove_btn = Ext.createWidget('proxmoxStdRemoveButton', {
selModel: me.selModel,
baseurl: '/config/transport',
callback: reload,
waitMsgTarget: me
});
var common_properties = [
{
xtype: 'textfield',
name: 'host',
fieldLabel: gettext("Host")
},
{
xtype: 'proxmoxKVComboBox',
name: 'protocol',
fieldLabel: gettext('Protocol'),
deleteEmpty: false,
comboItems: [
[ 'smtp', 'SMTP' ],
[ 'lmtp', 'LMTP' ]
],
allowBlank: true,
value: 'smtp'
},
{
xtype: 'proxmoxintegerfield',
name: 'port',
value: 25,
minValue: 1,
maxValue: 65535,
fieldLabel: gettext("Port")
},
{
xtype: 'proxmoxcheckbox',
name: 'use_mx',
checked: true,
uncheckedValue: 0,
fieldLabel: gettext("Use MX (SMTP)")
},
{
xtype: 'textfield',
name: 'comment',
fieldLabel: gettext("Comment")
}
];
var edit_properties = common_properties.slice();
edit_properties.unshift({
xtype: 'displayfield',
name: 'domain',
fieldLabel: gettext("Relay Domain")
});
var create_properties = common_properties.slice();
create_properties.unshift({
xtype: 'proxmoxtextfield',
name: 'domain',
fieldLabel: gettext("Relay Domain")
});
var run_editor = function() {
var rec = me.selModel.getSelection()[0];
if (!rec) {
return;
}
var config = {
url: "/api2/extjs/config/transport/" + rec.data.domain,
onlineHelp: 'pmgconfig_mailproxy_transports',
method: 'PUT',
subject: gettext("Transport"),
items: edit_properties
};
var win = Ext.createWidget('proxmoxWindowEdit', config);
win.load();
win.on('destroy', reload);
win.show();
};
var tbar = [
{
xtype: 'proxmoxButton',
text: gettext('Edit'),
disabled: true,
selModel: me.selModel,
handler: run_editor
},
{
text: gettext('Create'),
handler: function() {
var config = {
method: 'POST',
url: "/api2/extjs/config/transport",
onlineHelp: 'pmgconfig_mailproxy_transports',
isCreate: true,
subject: gettext("Transport"),
items: create_properties
};
var win = Ext.createWidget('proxmoxWindowEdit', config);
win.on('destroy', reload);
win.show();
}
},
remove_btn
];
Proxmox.Utils.monStoreErrors(me, store, true);
Ext.apply(me, {
store: store,
tbar: tbar,
run_editor: run_editor,
viewConfig: {
trackOver: false
},
columns: [
{
header: gettext('Relay Domain'),
width: 200,
sortable: true,
dataIndex: 'domain'
},
{
header: gettext('Host'),
width: 200,
sortable: true,
dataIndex: 'host'
},
{
header: gettext('Protocol'),
width: 200,
sortable: true,
dataIndex: 'protocol'
},
{
header: gettext('Port'),
width: 80,
sortable: false,
dataIndex: 'port'
},
{
header: gettext('Use MX (SMTP)'),
width: 80,
renderer: Proxmox.Utils.format_boolean,
sortable: false,
dataIndex: 'use_mx'
},
{
header: gettext('Comment'),
sortable: false,
renderer: Ext.String.htmlEncode,
dataIndex: 'comment',
flex: 1
}
],
listeners: {
itemdblclick: run_editor,
activate: reload
}
});
me.callParent();
}
});