]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/grid/FirewallOptions.js
Do not translate IT terms which should be used 'as is' in every language
[pve-manager.git] / www / manager6 / grid / FirewallOptions.js
1 Ext.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_enabled_toggle,
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: 'pveIntegerField',
63 name: name,
64 minValue: minValue,
65 fieldLabel: text,
66 emptyText: gettext('Default'),
67 getSubmitData: function() {
68 var me = this;
69 var val = me.getSubmitValue();
70 if (val !== null && val !== '') {
71 var data = {};
72 data[name] = val;
73 return data;
74 } else {
75 return { 'delete' : name };
76 }
77 }
78 }
79 }
80 };
81 };
82
83 var add_log_row = function(name, labelWidth) {
84 rows[name] = {
85 header: name,
86 required: true,
87 defaultValue: 'nolog',
88 editor: {
89 xtype: 'pveWindowEdit',
90 subject: name,
91 fieldDefaults: { labelWidth: labelWidth || 100 },
92 items: {
93 xtype: 'pveKVComboBox',
94 name: name,
95 fieldLabel: name,
96 comboItems: [['nolog', 'nolog'], ['info', 'info'], ['err', 'err'],
97 ['warning', 'warning'], ['crit', 'crit'], ['alert', 'alert'],
98 ['emerg', 'emerg'], ['debug', 'debug']]
99 }
100 }
101 };
102 };
103
104
105 if (me.fwtype === 'node') {
106 add_boolean_row('enable', gettext('Firewall'), 1);
107 add_boolean_row('nosmurfs', gettext('SMURFS filter'), 1);
108 add_boolean_row('tcpflags', gettext('TCP flags filter'), 0);
109 add_boolean_row('ndp', gettext('NDP'), 1);
110 add_integer_row('nf_conntrack_max', 'nf_conntrack_max', 120, 32768);
111 add_integer_row('nf_conntrack_tcp_timeout_established',
112 'nf_conntrack_tcp_timeout_established', 250, 7875);
113 add_log_row('log_level_in');
114 add_log_row('log_level_out');
115 add_log_row('tcp_flags_log_level', 120);
116 add_log_row('smurf_log_level');
117 } else if (me.fwtype === 'vm') {
118 add_boolean_row('enable', gettext('Firewall'), 0);
119 add_boolean_row('dhcp', 'DHCP', 0);
120 add_boolean_row('ndp', 'NDP', 1);
121 add_boolean_row('radv', gettext('Router Advertisement'), 0);
122 add_boolean_row('macfilter', gettext('MAC filter'), 1);
123 add_boolean_row('ipfilter', gettext('IP filter'), 0);
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('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.apply(me, {
220 url: "/api2/json" + me.base_url,
221 tbar: [ edit_btn ],
222 rows: rows,
223 listeners: {
224 itemdblclick: run_editor,
225 selectionchange: set_button_status
226 }
227 });
228
229 me.callParent();
230
231 me.on('activate', reload);
232 }
233 });