]>
Commit | Line | Data |
---|---|---|
307a2fb8 | 1 | Ext.define('PVE.FirewallOptions', { |
8ea2c870 | 2 | extend: 'Proxmox.grid.ObjectGrid', |
307a2fb8 DM |
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 | ||
746ebf2a | 26 | me.rows = {}; |
307a2fb8 | 27 | |
746ebf2a TL |
28 | var add_boolean_row = function(name, text, defaultValue) { |
29 | me.add_boolean_row(name, text, { defaultValue: defaultValue }); | |
307a2fb8 | 30 | }; |
746ebf2a TL |
31 | var add_integer_row = function(name, text, minValue) { |
32 | me.add_boolean_row(name, text, { minValue: minValue }); | |
307a2fb8 DM |
33 | }; |
34 | ||
35 | var add_log_row = function(name, labelWidth) { | |
746ebf2a | 36 | me.rows[name] = { |
307a2fb8 DM |
37 | header: name, |
38 | required: true, | |
39 | defaultValue: 'nolog', | |
40 | editor: { | |
9fccc702 | 41 | xtype: 'proxmoxWindowEdit', |
307a2fb8 DM |
42 | subject: name, |
43 | fieldDefaults: { labelWidth: labelWidth || 100 }, | |
44 | items: { | |
09cacce7 | 45 | xtype: 'proxmoxKVComboBox', |
307a2fb8 DM |
46 | name: name, |
47 | fieldLabel: name, | |
734b3795 | 48 | comboItems: [['nolog', 'nolog'], ['info', 'info'], ['err', 'err'], |
307a2fb8 DM |
49 | ['warning', 'warning'], ['crit', 'crit'], ['alert', 'alert'], |
50 | ['emerg', 'emerg'], ['debug', 'debug']] | |
51 | } | |
52 | } | |
53 | }; | |
54 | }; | |
55 | ||
56 | ||
57 | if (me.fwtype === 'node') { | |
0a3cf3d4 | 58 | add_boolean_row('enable', gettext('Firewall'), 1); |
307a2fb8 DM |
59 | add_boolean_row('nosmurfs', gettext('SMURFS filter'), 1); |
60 | add_boolean_row('tcpflags', gettext('TCP flags filter'), 0); | |
c4941d5b | 61 | add_boolean_row('ndp', 'NDP', 1); |
746ebf2a TL |
62 | add_integer_row('nf_conntrack_max', 'nf_conntrack_max', 32768); |
63 | add_integer_row('nf_conntrack_tcp_timeout_established', | |
64 | 'nf_conntrack_tcp_timeout_established', 7875); | |
307a2fb8 DM |
65 | add_log_row('log_level_in'); |
66 | add_log_row('log_level_out'); | |
67 | add_log_row('tcp_flags_log_level', 120); | |
68 | add_log_row('smurf_log_level'); | |
69 | } else if (me.fwtype === 'vm') { | |
0a3cf3d4 | 70 | add_boolean_row('enable', gettext('Firewall'), 0); |
6a5be79f | 71 | add_boolean_row('dhcp', 'DHCP', 1); |
b9628aa5 | 72 | add_boolean_row('ndp', 'NDP', 1); |
0a3cf3d4 | 73 | add_boolean_row('radv', gettext('Router Advertisement'), 0); |
307a2fb8 | 74 | add_boolean_row('macfilter', gettext('MAC filter'), 1); |
9eef71f3 | 75 | add_boolean_row('ipfilter', gettext('IP filter'), 0); |
307a2fb8 DM |
76 | add_log_row('log_level_in'); |
77 | add_log_row('log_level_out'); | |
78 | } else if (me.fwtype === 'dc') { | |
0a3cf3d4 | 79 | add_boolean_row('enable', gettext('Firewall'), 0); |
746ebf2a TL |
80 | } |
81 | ||
307a2fb8 | 82 | if (me.fwtype === 'dc' || me.fwtype === 'vm') { |
746ebf2a | 83 | me.rows.policy_in = { |
307a2fb8 DM |
84 | header: gettext('Input Policy'), |
85 | required: true, | |
86 | defaultValue: 'DROP', | |
87 | editor: { | |
9fccc702 | 88 | xtype: 'proxmoxWindowEdit', |
307a2fb8 DM |
89 | subject: gettext('Input Policy'), |
90 | items: { | |
91 | xtype: 'pveFirewallPolicySelector', | |
92 | name: 'policy_in', | |
93 | value: 'DROP', | |
94 | fieldLabel: gettext('Input Policy') | |
95 | } | |
96 | } | |
97 | }; | |
98 | ||
746ebf2a | 99 | me.rows.policy_out = { |
307a2fb8 DM |
100 | header: gettext('Output Policy'), |
101 | required: true, | |
102 | defaultValue: 'ACCEPT', | |
103 | editor: { | |
9fccc702 | 104 | xtype: 'proxmoxWindowEdit', |
307a2fb8 DM |
105 | subject: gettext('Output Policy'), |
106 | items: { | |
107 | xtype: 'pveFirewallPolicySelector', | |
108 | name: 'policy_out', | |
109 | value: 'ACCEPT', | |
110 | fieldLabel: gettext('Output Policy') | |
111 | } | |
112 | } | |
113 | }; | |
114 | } | |
115 | ||
307a2fb8 DM |
116 | var edit_btn = new Ext.Button({ |
117 | text: gettext('Edit'), | |
118 | disabled: true, | |
746ebf2a | 119 | handler: me.run_editor |
307a2fb8 DM |
120 | }); |
121 | ||
122 | var set_button_status = function() { | |
123 | var sm = me.getSelectionModel(); | |
124 | var rec = sm.getSelection()[0]; | |
125 | ||
126 | if (!rec) { | |
127 | edit_btn.disable(); | |
128 | return; | |
129 | } | |
746ebf2a | 130 | var rowdef = me.rows[rec.data.key]; |
307a2fb8 DM |
131 | edit_btn.setDisabled(!rowdef.editor); |
132 | }; | |
133 | ||
bc5d0cf8 | 134 | Ext.apply(me, { |
307a2fb8 | 135 | url: "/api2/json" + me.base_url, |
307a2fb8 | 136 | tbar: [ edit_btn ], |
746ebf2a TL |
137 | editorConfig: { |
138 | url: '/api2/extjs/' + me.base_url | |
139 | }, | |
307a2fb8 | 140 | listeners: { |
746ebf2a | 141 | itemdblclick: me.run_editor, |
307a2fb8 DM |
142 | selectionchange: set_button_status |
143 | } | |
144 | }); | |
145 | ||
146 | me.callParent(); | |
147 | ||
746ebf2a TL |
148 | me.on('activate', me.rstore.startUpdate); |
149 | me.on('destroy', me.rstore.stopUpdate); | |
150 | me.on('deactivate', me.rstore.stopUpdate); | |
307a2fb8 DM |
151 | } |
152 | }); |