]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/grid/FirewallOptions.js
PVE::API2::Nodes::Nodeinfo: import raise_param_exc
[pve-manager.git] / www / manager6 / grid / FirewallOptions.js
CommitLineData
307a2fb8
DM
1Ext.define('PVE.FirewallOptions', {
2 extend: 'PVE.grid.ObjectGrid',
3 alias: ['widget.pveFirewallOptions'],
4
5 fwtype: undefined, // 'dc', 'node' or 'vm'
6
7 base_url: undefined,
8
9 initComponent : function() {
10 /*jslint confusion: true */
11
12 var me = this;
13
14 if (!me.base_url) {
15 throw "missing base_url configuration";
16 }
17
18 if (me.fwtype === 'dc' || me.fwtype === 'node' || me.fwtype === 'vm') {
19 if (me.fwtype === 'node') {
20 me.cwidth1 = 250;
21 }
22 } else {
23 throw "unknown firewall option type";
24 }
25
26 var rows = {};
27
28 var add_boolean_row = function(name, text, defaultValue, labelWidth) {
29 rows[name] = {
30 header: text,
31 required: true,
32 defaultValue: defaultValue || 0,
33 renderer: PVE.Utils.format_boolean,
34 editor: {
35 xtype: 'pveWindowEdit',
36 subject: text,
37 fieldDefaults: { labelWidth: labelWidth || 100 },
38 items: {
39 xtype: 'pvecheckbox',
40 defaultValue: defaultValue || 0,
41 checked: defaultValue ? true : false,
42 name: name,
43 uncheckedValue: 0,
44 fieldLabel: text
45 }
46 }
47 };
48 };
49
50 var add_integer_row = function(name, text, labelWidth, minValue) {
51 rows[name] = {
52 header: text,
53 required: true,
54 renderer: function(value) {
55 return value || PVE.Utils.defaultText;
56 },
57 editor: {
58 xtype: 'pveWindowEdit',
59 subject: text,
60 fieldDefaults: { labelWidth: labelWidth || 100 },
61 items: {
62 xtype: 'numberfield',
63 name: name,
64 minValue: minValue,
65 decimalPrecision: 0,
66 fieldLabel: text,
67 emptyText: gettext('Default'),
68 getSubmitData: function() {
69 var me = this;
70 var val = me.getSubmitValue();
71 if (val !== null && val !== '') {
72 var data = {};
73 data[name] = val;
74 return data;
75 } else {
76 return { 'delete' : name };
77 }
78 }
79 }
80 }
81 };
82 };
83
84 var add_log_row = function(name, labelWidth) {
85 rows[name] = {
86 header: name,
87 required: true,
88 defaultValue: 'nolog',
89 editor: {
90 xtype: 'pveWindowEdit',
91 subject: name,
92 fieldDefaults: { labelWidth: labelWidth || 100 },
93 items: {
94 xtype: 'pveKVComboBox',
95 name: name,
96 fieldLabel: name,
734b3795 97 comboItems: [['nolog', 'nolog'], ['info', 'info'], ['err', 'err'],
307a2fb8
DM
98 ['warning', 'warning'], ['crit', 'crit'], ['alert', 'alert'],
99 ['emerg', 'emerg'], ['debug', 'debug']]
100 }
101 }
102 };
103 };
104
105
106 if (me.fwtype === 'node') {
107 add_boolean_row('enable', gettext('Enable Firewall'), 1);
108 add_boolean_row('nosmurfs', gettext('SMURFS filter'), 1);
109 add_boolean_row('tcpflags', gettext('TCP flags filter'), 0);
bda8855a 110 add_boolean_row('ndp', gettext('Enable NDP'), 1);
307a2fb8
DM
111 add_integer_row('nf_conntrack_max', 'nf_conntrack_max', 120, 32768);
112 add_integer_row('nf_conntrack_tcp_timeout_established',
113 'nf_conntrack_tcp_timeout_established', 250, 7875);
114 add_log_row('log_level_in');
115 add_log_row('log_level_out');
116 add_log_row('tcp_flags_log_level', 120);
117 add_log_row('smurf_log_level');
118 } else if (me.fwtype === 'vm') {
119 add_boolean_row('enable', gettext('Enable Firewall'), 0);
120 add_boolean_row('dhcp', gettext('Enable DHCP'), 0);
bda8855a 121 add_boolean_row('ndp', gettext('Enable NDP'), 1);
41380b4d 122 add_boolean_row('radv', gettext('Allow Router Advertisement'), 0);
307a2fb8
DM
123 add_boolean_row('macfilter', gettext('MAC filter'), 1);
124 add_log_row('log_level_in');
125 add_log_row('log_level_out');
126 } else if (me.fwtype === 'dc') {
127 add_boolean_row('enable', gettext('Enable Firewall'), 0);
128 }
129
130 if (me.fwtype === 'dc' || me.fwtype === 'vm') {
131 rows.policy_in = {
132 header: gettext('Input Policy'),
133 required: true,
134 defaultValue: 'DROP',
135 editor: {
136 xtype: 'pveWindowEdit',
137 subject: gettext('Input Policy'),
138 items: {
139 xtype: 'pveFirewallPolicySelector',
140 name: 'policy_in',
141 value: 'DROP',
142 fieldLabel: gettext('Input Policy')
143 }
144 }
145 };
146
147 rows.policy_out = {
148 header: gettext('Output Policy'),
149 required: true,
150 defaultValue: 'ACCEPT',
151 editor: {
152 xtype: 'pveWindowEdit',
153 subject: gettext('Output Policy'),
154 items: {
155 xtype: 'pveFirewallPolicySelector',
156 name: 'policy_out',
157 value: 'ACCEPT',
158 fieldLabel: gettext('Output Policy')
159 }
160 }
161 };
162 }
163
164 var reload = function() {
165 me.rstore.load();
166 };
167
168 var run_editor = function() {
169 var sm = me.getSelectionModel();
170 var rec = sm.getSelection()[0];
171 if (!rec) {
172 return;
173 }
174
175 var rowdef = rows[rec.data.key];
176 if (!rowdef.editor) {
177 return;
178 }
179
180 var win;
181 if (Ext.isString(rowdef.editor)) {
182 win = Ext.create(rowdef.editor, {
183 pveSelNode: me.pveSelNode,
184 confid: rec.data.key,
185 url: '/api2/extjs' + me.base_url
186 });
187 } else {
188 var config = Ext.apply({
189 pveSelNode: me.pveSelNode,
190 confid: rec.data.key,
191 url: '/api2/extjs' + me.base_url
192 }, rowdef.editor);
193 win = Ext.createWidget(rowdef.editor.xtype, config);
194 win.load();
195 }
196
197 win.show();
198 win.on('destroy', reload);
199 };
200
201 var edit_btn = new Ext.Button({
202 text: gettext('Edit'),
203 disabled: true,
204 handler: run_editor
205 });
206
207 var set_button_status = function() {
208 var sm = me.getSelectionModel();
209 var rec = sm.getSelection()[0];
210
211 if (!rec) {
212 edit_btn.disable();
213 return;
214 }
215 var rowdef = rows[rec.data.key];
216 edit_btn.setDisabled(!rowdef.editor);
217 };
218
219 Ext.applyIf(me, {
220 url: "/api2/json" + me.base_url,
221 cwidth1: 150,
222 tbar: [ edit_btn ],
223 rows: rows,
224 listeners: {
225 itemdblclick: run_editor,
226 selectionchange: set_button_status
227 }
228 });
229
230 me.callParent();
231
734b3795 232 me.on('activate', reload);
307a2fb8
DM
233 }
234});