]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/grid/FirewallOptions.js
ext6migrate: listen to 'activate' events for panels inside a tabpanel
[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,
97 data: [['nolog', 'nolog'], ['info', 'info'], ['err', 'err'],
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);
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('Enable Firewall'), 0);
119 add_boolean_row('dhcp', gettext('Enable DHCP'), 0);
120 add_boolean_row('macfilter', gettext('MAC filter'), 1);
121 add_log_row('log_level_in');
122 add_log_row('log_level_out');
123 } else if (me.fwtype === 'dc') {
124 add_boolean_row('enable', gettext('Enable Firewall'), 0);
125 }
126
127 if (me.fwtype === 'dc' || me.fwtype === 'vm') {
128 rows.policy_in = {
129 header: gettext('Input Policy'),
130 required: true,
131 defaultValue: 'DROP',
132 editor: {
133 xtype: 'pveWindowEdit',
134 subject: gettext('Input Policy'),
135 items: {
136 xtype: 'pveFirewallPolicySelector',
137 name: 'policy_in',
138 value: 'DROP',
139 fieldLabel: gettext('Input Policy')
140 }
141 }
142 };
143
144 rows.policy_out = {
145 header: gettext('Output Policy'),
146 required: true,
147 defaultValue: 'ACCEPT',
148 editor: {
149 xtype: 'pveWindowEdit',
150 subject: gettext('Output Policy'),
151 items: {
152 xtype: 'pveFirewallPolicySelector',
153 name: 'policy_out',
154 value: 'ACCEPT',
155 fieldLabel: gettext('Output Policy')
156 }
157 }
158 };
159 }
160
161 var reload = function() {
162 me.rstore.load();
163 };
164
165 var run_editor = function() {
166 var sm = me.getSelectionModel();
167 var rec = sm.getSelection()[0];
168 if (!rec) {
169 return;
170 }
171
172 var rowdef = rows[rec.data.key];
173 if (!rowdef.editor) {
174 return;
175 }
176
177 var win;
178 if (Ext.isString(rowdef.editor)) {
179 win = Ext.create(rowdef.editor, {
180 pveSelNode: me.pveSelNode,
181 confid: rec.data.key,
182 url: '/api2/extjs' + me.base_url
183 });
184 } else {
185 var config = Ext.apply({
186 pveSelNode: me.pveSelNode,
187 confid: rec.data.key,
188 url: '/api2/extjs' + me.base_url
189 }, rowdef.editor);
190 win = Ext.createWidget(rowdef.editor.xtype, config);
191 win.load();
192 }
193
194 win.show();
195 win.on('destroy', reload);
196 };
197
198 var edit_btn = new Ext.Button({
199 text: gettext('Edit'),
200 disabled: true,
201 handler: run_editor
202 });
203
204 var set_button_status = function() {
205 var sm = me.getSelectionModel();
206 var rec = sm.getSelection()[0];
207
208 if (!rec) {
209 edit_btn.disable();
210 return;
211 }
212 var rowdef = rows[rec.data.key];
213 edit_btn.setDisabled(!rowdef.editor);
214 };
215
216 Ext.applyIf(me, {
217 url: "/api2/json" + me.base_url,
218 cwidth1: 150,
219 tbar: [ edit_btn ],
220 rows: rows,
221 listeners: {
222 itemdblclick: run_editor,
223 selectionchange: set_button_status
224 }
225 });
226
227 me.callParent();
228
229 me.on('show', reload);
230 }
231});