]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/grid/FirewallRules.js
ui: eslint: fix trailing spaces
[pve-manager.git] / www / manager6 / grid / FirewallRules.js
index ab3207ba11ff33f16b25469b26efdad9087b05dd..57ff9eaf9a13c5cf3c06a16623a45c9ea61cbe29 100644 (file)
@@ -1,7 +1,26 @@
 Ext.define('PVE.form.FWMacroSelector', {
-    extend: 'PVE.form.ComboGrid',
+    extend: 'Proxmox.form.ComboGrid',
     alias: 'widget.pveFWMacroSelector',
-
+    allowBlank: true,
+    autoSelect: false,
+    valueField: 'macro',
+    displayField: 'macro',
+    listConfig: {
+       columns: [
+           {
+               header: gettext('Macro'),
+               dataIndex: 'macro',
+               hideable: false,
+               width: 100
+           },
+           {
+               header: gettext('Description'),
+               renderer: Ext.String.htmlEncode,
+               flex: 1,
+               dataIndex: 'descr'
+           }
+       ]
+    },
     initComponent: function() {
        var me = this;
 
@@ -10,7 +29,7 @@ Ext.define('PVE.form.FWMacroSelector', {
            fields: [ 'macro', 'descr' ],
            idProperty: 'macro',
            proxy: {
-               type: 'pve',
+               type: 'proxmox',
                url: "/api2/json/cluster/firewall/macros"
            },
            sorters: {
@@ -20,26 +39,7 @@ Ext.define('PVE.form.FWMacroSelector', {
        });
 
        Ext.apply(me, {
-           store: store,
-           allowBlank: true,
-           autoSelect: false,
-           valueField: 'macro',
-           displayField: 'macro',
-            listConfig: {
-               columns: [
-                   {
-                       header: gettext('Macro'),
-                       dataIndex: 'macro',
-                       hideable: false,
-                       width: 100
-                   },
-                   {
-                       header: gettext('Description'),
-                       flex: 1,
-                       dataIndex: 'descr'
-                   }
-               ]
-           }
+           store: store
        });
 
        me.callParent();
@@ -47,7 +47,7 @@ Ext.define('PVE.form.FWMacroSelector', {
 });
 
 Ext.define('PVE.FirewallRulePanel', {
-    extend: 'PVE.panel.InputPanel',
+    extend: 'Proxmox.panel.InputPanel',
 
     allow_iface: false,
 
@@ -59,14 +59,14 @@ Ext.define('PVE.FirewallRulePanel', {
        // hack: editable ComboGrid returns nothing when empty, so we need to set ''
        // Also, disabled text fields return nothing, so we need to set ''
 
-       Ext.Array.each(['source', 'dest', 'proto', 'sport', 'dport'], function(key) {
+       Ext.Array.each(['source', 'dest', 'macro', 'proto', 'sport', 'dport', 'log'], function(key) {
            if (values[key] === undefined) {
                values[key] = '';
            }
        });
 
        delete values.modified_marker;
+
        return values;
     },
 
@@ -80,14 +80,14 @@ Ext.define('PVE.FirewallRulePanel', {
        me.column1 = [
            {
                // hack: we use this field to mark the form 'dirty' when the
-               // record has errors- so that the user can safe the unmodified 
+               // record has errors- so that the user can safe the unmodified
                // form again.
                xtype: 'hiddenfield',
                name: 'modified_marker',
-               value: '',
+               value: ''
            },
            {
-               xtype: 'pveKVComboBox',
+               xtype: 'proxmoxKVComboBox',
                name: 'type',
                value: 'in',
                comboItems: [['in', 'in'], ['out', 'out']],
@@ -95,7 +95,7 @@ Ext.define('PVE.FirewallRulePanel', {
                allowBlank: false
            },
            {
-               xtype: 'pveKVComboBox',
+               xtype: 'proxmoxKVComboBox',
                name: 'action',
                value: 'ACCEPT',
                comboItems: [['ACCEPT', 'ACCEPT'], ['DROP', 'DROP'], ['REJECT', 'REJECT']],
@@ -106,9 +106,9 @@ Ext.define('PVE.FirewallRulePanel', {
 
        if (me.allow_iface) {
            me.column1.push({
-               xtype: 'pvetextfield',
+               xtype: 'proxmoxtextfield',
                name: 'iface',
-               deleteEmpty: !me.create,
+               deleteEmpty: !me.isCreate,
                value: '',
                fieldLabel: gettext('Interface')
            });
@@ -116,7 +116,6 @@ Ext.define('PVE.FirewallRulePanel', {
            me.column1.push({
                xtype: 'displayfield',
                fieldLabel: '',
-               height: 22, // hack: set same height as text fields
                value: ''
            });
        }
@@ -149,25 +148,24 @@ Ext.define('PVE.FirewallRulePanel', {
            }
        );
 
-       
+
        me.column2 = [
            {
-               xtype: 'pvecheckbox',
+               xtype: 'proxmoxcheckbox',
                name: 'enable',
                checked: false,
-               height: 22, // hack: set same height as text fields
                uncheckedValue: 0,
                fieldLabel: gettext('Enable')
            },
            {
                xtype: 'pveFWMacroSelector',
                name: 'macro',
-               value: '',
                fieldLabel: gettext('Macro'),
+               editable: true,
                allowBlank: true,
                listeners: {
                    change: function(f, value) {
-                        if (value === '') {
+                        if (value === null) {
                            me.down('field[name=proto]').setDisabled(false);
                            me.down('field[name=sport]').setDisabled(false);
                            me.down('field[name=dport]').setDisabled(false);
@@ -177,7 +175,7 @@ Ext.define('PVE.FirewallRulePanel', {
                            me.down('field[name=sport]').setDisabled(true);
                            me.down('field[name=sport]').setValue('');
                            me.down('field[name=dport]').setDisabled(true);
-                           me.down('field[name=dport]').setValue('');
+                           me.down('field[name=dport]').setValue('');
                        }
                     }
                 }
@@ -205,12 +203,17 @@ Ext.define('PVE.FirewallRulePanel', {
            {
                xtype: 'textfield',
                name: 'dport',
-               height: 22, // hack: set same height as text fields
                value: '',
                fieldLabel: gettext('Dest. port')
            }
        ];
-       
+
+       me.advancedColumn1 = [
+           {
+               xtype: 'pveFirewallLogLevels'
+           }
+       ];
+
        me.columnB = [
            {
                xtype: 'textfield',
@@ -225,7 +228,7 @@ Ext.define('PVE.FirewallRulePanel', {
 });
 
 Ext.define('PVE.FirewallRuleEdit', {
-    extend: 'PVE.window.Edit',
+    extend: 'Proxmox.window.Edit',
 
     base_url: undefined,
     list_refs_url: undefined,
@@ -233,7 +236,7 @@ Ext.define('PVE.FirewallRuleEdit', {
     allow_iface: false,
 
     initComponent : function() {
-       /*jslint confusion: true */
+
        var me = this;
 
        if (!me.base_url) {
@@ -243,9 +246,9 @@ Ext.define('PVE.FirewallRuleEdit', {
            throw "no list_refs_url specified";
        }
 
-       me.create = (me.rule_pos === undefined);
+       me.isCreate = (me.rule_pos === undefined);
 
-       if (me.create) {
+       if (me.isCreate) {
             me.url = '/api2/extjs' + me.base_url;
             me.method = 'POST';
         } else {
@@ -254,7 +257,7 @@ Ext.define('PVE.FirewallRuleEdit', {
         }
 
        var ipanel = Ext.create('PVE.FirewallRulePanel', {
-           create: me.create,
+           isCreate: me.isCreate,
            list_refs_url: me.list_refs_url,
            allow_iface: me.allow_iface,
            rule_pos: me.rule_pos
@@ -268,7 +271,7 @@ Ext.define('PVE.FirewallRuleEdit', {
 
        me.callParent();
 
-       if (!me.create) {
+       if (!me.isCreate) {
            me.load({
                success: function(response, options) {
                    var values = response.result.data;
@@ -278,29 +281,31 @@ Ext.define('PVE.FirewallRuleEdit', {
                        field.setValue(1);
                        Ext.Function.defer(function() {
                            var form = ipanel.up('form').getForm();
-                           form.markInvalid(values.errors)
+                           form.markInvalid(values.errors);
                        }, 100);
                    }
                }
            });
+       } else if (me.rec) {
+           ipanel.setValues(me.rec.data);
        }
     }
 });
 
 Ext.define('PVE.FirewallGroupRuleEdit', {
-    extend: 'PVE.window.Edit',
+    extend: 'Proxmox.window.Edit',
 
     base_url: undefined,
 
     allow_iface: false,
 
     initComponent : function() {
-       /*jslint confusion: true */
+
        var me = this;
 
-       me.create = (me.rule_pos === undefined);
+       me.isCreate = (me.rule_pos === undefined);
 
-       if (me.create) {
+       if (me.isCreate) {
             me.url = '/api2/extjs' + me.base_url;
             me.method = 'POST';
         } else {
@@ -325,23 +330,22 @@ Ext.define('PVE.FirewallGroupRuleEdit', {
 
        if (me.allow_iface) {
            column1.push({
-               xtype: 'pvetextfield',
+               xtype: 'proxmoxtextfield',
                name: 'iface',
-               deleteEmpty: !me.create,
+               deleteEmpty: !me.isCreate,
                value: '',
                fieldLabel: gettext('Interface')
            });
        }
 
-       var ipanel = Ext.create('PVE.panel.InputPanel', {
-           create: me.create,
+       var ipanel = Ext.create('Proxmox.panel.InputPanel', {
+           isCreate: me.isCreate,
            column1: column1,
            column2: [
                {
-                   xtype: 'pvecheckbox',
+                   xtype: 'proxmoxcheckbox',
                    name: 'enable',
                    checked: false,
-                   height: 22, // hack: set same height as text fields
                    uncheckedValue: 0,
                    fieldLabel: gettext('Enable')
                }
@@ -364,7 +368,7 @@ Ext.define('PVE.FirewallGroupRuleEdit', {
 
        me.callParent();
 
-       if (!me.create) {
+       if (!me.isCreate) {
            me.load({
                success:  function(response, options) {
                    var values = response.result.data;
@@ -379,6 +383,11 @@ Ext.define('PVE.FirewallRules', {
     extend: 'Ext.grid.Panel',
     alias: 'widget.pveFirewallRules',
 
+    onlineHelp: 'chapter_pve_firewall',
+
+    stateful: true,
+    stateId: 'grid-firewall-rules',
+
     base_url: undefined,
     list_refs_url: undefined,
 
@@ -405,11 +414,12 @@ Ext.define('PVE.FirewallRules', {
            me.store.removeAll();
        } else {
            me.addBtn.setDisabled(false);
+           me.removeBtn.baseurl = url + '/';
            if (me.groupBtn) {
                me.groupBtn.setDisabled(false);
            }
            me.store.setProxy({
-               type: 'pve',
+               type: 'proxmox',
                url: '/api2/json' + url
            });
 
@@ -420,11 +430,11 @@ Ext.define('PVE.FirewallRules', {
     moveRule: function(from, to) {
         var me = this;
 
-       if (!me.base_url) { 
+       if (!me.base_url) {
            return;
        }
 
-       PVE.Utils.API2Request({
+       Proxmox.Utils.API2Request({
            url: me.base_url + "/" + from,
            method: 'PUT',
            params: { moveto: to },
@@ -441,7 +451,7 @@ Ext.define('PVE.FirewallRules', {
     updateRule: function(rule) {
         var me = this;
 
-       if (!me.base_url) { 
+       if (!me.base_url) {
            return;
        }
 
@@ -451,7 +461,7 @@ Ext.define('PVE.FirewallRules', {
        delete rule.pos;
        delete rule.errors;
 
-       PVE.Utils.API2Request({
+       Proxmox.Utils.API2Request({
            url: me.base_url + '/' + pos.toString(),
            method: 'PUT',
            params: rule,
@@ -465,29 +475,8 @@ Ext.define('PVE.FirewallRules', {
        });
     },
 
-    deleteRule: function(rule) {
-        var me = this;
-
-       if (!me.base_url) {
-           return;
-       }
-
-       PVE.Utils.API2Request({
-           url: me.base_url + '/' + rule.pos.toString() +
-               '?digest=' + encodeURIComponent(rule.digest),
-           method: 'DELETE',
-           waitMsgTarget: me,
-           failure: function(response, options) {
-               Ext.Msg.alert(gettext('Error'), response.htmlStatus);
-           },
-           callback: function() {
-               me.store.load();
-           }
-       });
-    },
 
     initComponent: function() {
-       /*jslint confusion: true */
         var me = this;
 
        if (!me.list_refs_url) {
@@ -532,7 +521,7 @@ Ext.define('PVE.FirewallRules', {
            win.on('destroy', reload);
        };
 
-       me.editBtn = Ext.create('PVE.button.Button',{
+       me.editBtn = Ext.create('Proxmox.button.Button',{
            text: gettext('Edit'),
            disabled: true,
            selModel: sm,
@@ -553,9 +542,43 @@ Ext.define('PVE.FirewallRules', {
            }
        });
 
+       var run_copy_editor = function() {
+           var rec = sm.getSelection()[0];
+
+           if (!rec) {
+               return;
+           }
+           var type = rec.data.type;
+
+
+           if (!(type === 'in' || type === 'out')) {
+               return;
+           }
+
+           var win = Ext.create('PVE.FirewallRuleEdit', {
+               allow_iface: me.allow_iface,
+               base_url: me.base_url,
+               list_refs_url: me.list_refs_url,
+               rec: rec
+           });
+
+           win.show();
+           win.on('destroy', reload);
+       };
+
+       me.copyBtn = Ext.create('Proxmox.button.Button',{
+           text: gettext('Copy'),
+           selModel: sm,
+           enableFn: function(rec) {
+               return (rec.data.type === 'in' || rec.data.type === 'out');
+           },
+           disabled: true,
+           handler: run_copy_editor
+       });
+
        if (me.allow_groups) {
            me.groupBtn =  Ext.create('Ext.Button', {
-               text: gettext('Insert') + ': ' + 
+               text: gettext('Insert') + ': ' +
                    gettext('Security Group'),
                disabled: true,
                handler: function() {
@@ -569,21 +592,22 @@ Ext.define('PVE.FirewallRules', {
            });
        }
 
-       me.removeBtn = Ext.create('PVE.button.Button',{
-           text: gettext('Remove'),
+       me.removeBtn = Ext.create('Proxmox.button.StdRemoveButton',{
            selModel: sm,
-           disabled: true,
-           handler: function() {
-               var rec = sm.getSelection()[0];
-               if (!rec) {
-                   return;
-               }
-               me.deleteRule(rec.data);
+           baseurl: me.base_url + '/',
+           confirmMsg: false,
+           getRecordName: function(rec) {
+               var rule = rec.data;
+               return rule.pos.toString() +
+                   '?digest=' + encodeURIComponent(rule.digest);
+           },
+           callback: function() {
+               me.store.load();
            }
        });
 
        var tbar = me.tbar_prefix ? [ me.tbar_prefix ] : [];
-       tbar.push(me.addBtn);
+       tbar.push(me.addBtn, me.copyBtn);
        if (me.groupBtn) {
            tbar.push(me.groupBtn);
        }
@@ -592,9 +616,9 @@ Ext.define('PVE.FirewallRules', {
        var render_errors = function(name, value, metaData, record) {
            var errors = record.data.errors;
            if (errors && errors[name]) {
-               metaData.tdCls = 'x-form-invalid-field';
+               metaData.tdCls = 'proxmox-invalid-row';
                var html = '<p>' +  Ext.htmlEncode(errors[name]) + '</p>';
-               metaData.tdAttr = 'data-qwidth=600 data-qtitle="ERROR" data-qtip="' + 
+               metaData.tdAttr = 'data-qwidth=600 data-qtitle="ERROR" data-qtip="' +
                    html.replace(/\"/g,'&quot;') + '"';
            }
            return value;
@@ -605,7 +629,7 @@ Ext.define('PVE.FirewallRules', {
                // similar to xtype: 'rownumberer',
                dataIndex: 'pos',
                resizable: false,
-               width: 23,
+               width: 42,
                sortable: false,
                align: 'right',
                hideable: false,
@@ -716,6 +740,14 @@ Ext.define('PVE.FirewallRules', {
                },
                width: 100
            },
+           {
+               header: gettext('Log level'),
+               dataIndex: 'log',
+               renderer: function(value, metaData, record) {
+                   return render_errors('log', value, metaData, record);
+               },
+               width: 100
+           },
            {
                header: gettext('Comment'),
                dataIndex: 'comment',