base_url: undefined,
- initComponent : function() {
- /*jslint confusion: true */
-
+ initComponent: function() {
var me = this;
if (!me.base_url) {
throw "unknown firewall option type";
}
+ let caps = Ext.state.Manager.get('GuiCap');
+ let canEdit = caps.vms['VM.Config.Network'] || caps.dc['Sys.Modify'] || caps.nodes['Sys.Modify'];
+
me.rows = {};
var add_boolean_row = function(name, text, defaultValue) {
}
return value;
- }
+ },
});
};
items: {
xtype: 'pveFirewallLogLevels',
name: name,
- fieldLabel: name
- }
- }
+ fieldLabel: name,
+ },
+ },
};
};
renderer: Proxmox.Utils.format_boolean,
editor: {
xtype: 'pveFirewallEnableEdit',
- defaultValue: 1
- }
+ defaultValue: 1,
+ },
};
add_boolean_row('nosmurfs', gettext('SMURFS filter'), 1);
add_boolean_row('tcpflags', gettext('TCP flags filter'), 0);
add_log_row('log_level_out');
add_log_row('tcp_flags_log_level', 120);
add_log_row('smurf_log_level');
+ add_boolean_row('nftables', gettext('nftables (tech preview)'), 0);
} else if (me.fwtype === 'vm') {
me.rows.enable = {
required: true,
renderer: Proxmox.Utils.format_boolean,
editor: {
xtype: 'pveFirewallEnableEdit',
- defaultValue: 0
- }
+ defaultValue: 0,
+ },
};
add_boolean_row('dhcp', 'DHCP', 1);
add_boolean_row('ndp', 'NDP', 1);
} else if (me.fwtype === 'dc') {
add_boolean_row('enable', gettext('Firewall'), 0);
add_boolean_row('ebtables', 'ebtables', 1);
+ me.rows.log_ratelimit = {
+ header: gettext('Log rate limit'),
+ required: true,
+ defaultValue: gettext('Default') + ' (enable=1,rate1/second,burst=5)',
+ editor: {
+ xtype: 'pveFirewallLograteEdit',
+ defaultValue: 'enable=1',
+ },
+ };
}
if (me.fwtype === 'dc' || me.fwtype === 'vm') {
xtype: 'pveFirewallPolicySelector',
name: 'policy_in',
value: 'DROP',
- fieldLabel: gettext('Input Policy')
- }
- }
+ fieldLabel: gettext('Input Policy'),
+ },
+ },
};
me.rows.policy_out = {
xtype: 'pveFirewallPolicySelector',
name: 'policy_out',
value: 'ACCEPT',
- fieldLabel: gettext('Output Policy')
- }
- }
+ fieldLabel: gettext('Output Policy'),
+ },
+ },
};
}
var edit_btn = new Ext.Button({
text: gettext('Edit'),
disabled: true,
- handler: function() { me.run_editor(); }
+ handler: function() { me.run_editor(); },
});
var set_button_status = function() {
return;
}
var rowdef = me.rows[rec.data.key];
- edit_btn.setDisabled(!rowdef.editor);
+ if (canEdit) {
+ edit_btn.setDisabled(!rowdef.editor);
+ }
};
Ext.apply(me, {
url: "/api2/json" + me.base_url,
- tbar: [ edit_btn ],
+ tbar: [edit_btn],
editorConfig: {
- url: '/api2/extjs/' + me.base_url
+ url: '/api2/extjs/' + me.base_url,
},
listeners: {
- itemdblclick: me.run_editor,
- selectionchange: set_button_status
- }
+ itemdblclick: () => { if (canEdit) { me.run_editor(); } },
+ selectionchange: set_button_status,
+ },
});
me.callParent();
me.on('activate', me.rstore.startUpdate);
me.on('destroy', me.rstore.stopUpdate);
me.on('deactivate', me.rstore.stopUpdate);
- }
+ },
});
value: 'nolog',
comboItems: [['nolog', 'nolog'], ['emerg', 'emerg'], ['alert', 'alert'],
['crit', 'crit'], ['err', 'err'], ['warning', 'warning'],
- ['notice', 'notice'], ['info', 'info'], ['debug', 'debug']]
+ ['notice', 'notice'], ['info', 'info'], ['debug', 'debug']],
});