]> git.proxmox.com Git - pmg-gui.git/commitdiff
Implement TLS Policy Setting
authorStoiko Ivanov <s.ivanov@proxmox.com>
Wed, 26 Sep 2018 12:58:34 +0000 (14:58 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Thu, 27 Sep 2018 05:02:35 +0000 (07:02 +0200)
* add js/MailProxyTLSDomains.js for setting per domain TLS policies
* add js/MailProxyTLSPanel.js as a wrapper for the current MailProxyTLS.js and
  MailProxyTLSDomains.js

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
js/MailProxyConfiguration.js
js/MailProxyTLSDomains.js [new file with mode: 0644]
js/MailProxyTLSPanel.js [new file with mode: 0644]
js/Makefile

index 1b2f2fd49136b03510635ee9541eed9543512ed0..6902cb43c2c2ea9ae40422d56278a6e61b280693 100644 (file)
@@ -42,7 +42,7 @@ Ext.define('PMG.MailProxyConfiguration', {
        {
            itemId: 'tls',
             title: gettext('TLS'),
-           xtype: 'pmgMailProxyTLS'
+           xtype: 'pmgMailProxyTLSPanel'
        },
        {
            itemId: 'whitelist',
diff --git a/js/MailProxyTLSDomains.js b/js/MailProxyTLSDomains.js
new file mode 100644 (file)
index 0000000..419573c
--- /dev/null
@@ -0,0 +1,158 @@
+/*global Proxmox*/
+Ext.define('pmg-tls-policy', {
+    extend: 'Ext.data.Model',
+    fields: [ 'domain', 'policy' ],
+    idProperty: 'domain'
+});
+
+Ext.define('PMG.MailProxyTLSDomains', {
+    extend: 'Ext.grid.GridPanel',
+    alias: ['widget.pmgMailProxyTLSDomains'],
+
+    initComponent : function() {
+       var me = this;
+
+       var baseurl = '/config/tlspolicy';
+       var rstore = Ext.create('Proxmox.data.UpdateStore', {
+           model: 'pmg-tls-policy',
+           storeid: 'pmg-mailproxy-tls-store-' + (++Ext.idSeed),
+           proxy: {
+               type: 'proxmox',
+               url: '/api2/json' + baseurl
+           },
+           sorters: {
+               property: 'domain',
+               order: 'DESC'
+           }
+       });
+
+       var store = Ext.create('Proxmox.data.DiffStore', { rstore: rstore});
+
+        var reload = function() {
+            store.load();
+        };
+
+       me.selModel = Ext.create('Ext.selection.RowModel', {});
+
+       var remove_btn = Ext.createWidget('proxmoxStdRemoveButton', {
+           selModel: me.selModel,
+           baseurl: baseurl,
+           callback: reload,
+           waitMsgTarget: me
+       });
+
+       var policy_selector_properties = {
+           xtype: 'proxmoxKVComboBox',
+           name: 'policy',
+           fieldLabel: 'Policy',
+           deleteEmpty: false,
+           comboItems: [
+               [ 'none', 'none' ],
+               [ 'may', 'may' ],
+               [ 'encrypt', 'encrypt' ],
+               [ 'dane', 'dane' ],
+               [ 'dane-only', 'dane-only' ],
+               [ 'fingerprint', 'fingerprint' ],
+               [ 'verify', 'verify' ],
+               [ 'secure', 'secure' ]
+           ],
+           allowBlank: true,
+           value: 'encrypt'
+       };
+
+       var run_editor = function() {
+           var rec = me.selModel.getSelection()[0];
+           if (!rec) {
+               return;
+           }
+
+           var config = {
+               url: '/api2/extjs' + baseurl + '/' + rec.data.domain,
+               method: 'PUT',
+               subject: gettext('TLS Policy'),
+               items: [
+                   {
+                       xtype: 'displayfield',
+                       name: 'domain',
+                       fieldLabel: gettext('Domain')
+                   },
+                   policy_selector_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 = {
+                       url: '/api2/extjs' + baseurl,
+                       method: 'POST',
+                       subject: gettext('TLS Policy'),
+                       isCreate: true,
+                       items: [
+                           {
+                               xtype: 'proxmoxtextfield',
+                               name: 'domain',
+                               fieldLabel: gettext('Domain')
+                           }, policy_selector_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('Domain'),
+                   width: 200,
+                   sortable: true,
+                   dataIndex: 'domain'
+               },
+               {
+                   header: gettext('Policy'),
+                   sortable: false,
+                   dataIndex: 'policy',
+                   flex: 1
+               }
+           ],
+           listeners: {
+               itemdblclick: run_editor,
+               activate: reload
+           }
+       });
+
+       me.on('activate', rstore.startUpdate);
+       me.on('destroy', rstore.stopUpdate);
+       me.on('deactivate', rstore.stopUpdate);
+       me.callParent();
+    }
+});
diff --git a/js/MailProxyTLSPanel.js b/js/MailProxyTLSPanel.js
new file mode 100644 (file)
index 0000000..a7abc78
--- /dev/null
@@ -0,0 +1,36 @@
+Ext.define('PMG.MailProxyTLSPanel', {
+    extend: 'Ext.panel.Panel',
+    alias: 'widget.pmgMailProxyTLSPanel',
+
+    layout: {
+       type: 'vbox',
+       align: 'stretch'
+    },
+
+    initComponent: function() {
+       var me = this;
+
+       var tlsSettings = Ext.create('PMG.MailProxyTLS', {
+           xtype: 'pmgMailProxyTLS',
+           title: gettext('Settings'),
+           border: 0,
+           collapsible: true,
+           padding: '0 0 20 0'
+       });
+
+       var tlsDomains = Ext.create('PMG.MailProxyTLSDomains', {
+           xtype: 'pmgMailProxyTLSDomains',
+           title: gettext('TLS Domain Policy'),
+           border: 0,
+           collapsible: true,
+           padding: '0 0 20 0'
+       });
+
+       me.items = [ tlsSettings, tlsDomains ];
+
+       me.callParent();
+
+       tlsSettings.relayEvents(me, ['activate', 'deactivate', 'destroy']);
+       tlsDomains.relayEvents(me, ['activate', 'deactivate', 'destroy']);
+    }
+});
index 069fc7b896107b240cf0e1189db4f0c414768664..882cbc4f0311e7897c6c6805861c9e41d9ddbc67 100644 (file)
@@ -41,6 +41,8 @@ JSSRC=                                                        \
        MailProxyPorts.js                               \
        MailProxyOptions.js                             \
        MailProxyTLS.js                                 \
+       MailProxyTLSPanel.js                            \
+       MailProxyTLSDomains.js                          \
        Transport.js                                    \
        MyNetworks.js                                   \
        RelayDomains.js                                 \