]>
Commit | Line | Data |
---|---|---|
53ebd289 | 1 | Ext.define('PVE.FirewallAliasEdit', { |
9fccc702 | 2 | extend: 'Proxmox.window.Edit', |
53ebd289 DM |
3 | |
4 | base_url: undefined, | |
09b3292e | 5 | |
53ebd289 DM |
6 | alias_name: undefined, |
7 | ||
09b3292e TL |
8 | width: 400, |
9 | ||
8058410f | 10 | initComponent: function() { |
5e7d2723 | 11 | let me = this; |
53ebd289 | 12 | |
53e3ea84 | 13 | me.isCreate = me.alias_name === undefined; |
53ebd289 | 14 | |
d5e771ce | 15 | if (me.isCreate) { |
a22fc39f TL |
16 | me.url = '/api2/extjs' + me.base_url; |
17 | me.method = 'POST'; | |
18 | } else { | |
19 | me.url = '/api2/extjs' + me.base_url + '/' + me.alias_name; | |
20 | me.method = 'PUT'; | |
21 | } | |
53ebd289 | 22 | |
5e7d2723 | 23 | let ipanel = Ext.create('Proxmox.panel.InputPanel', { |
d5e771ce | 24 | isCreate: me.isCreate, |
5e7d2723 TL |
25 | items: [ |
26 | { | |
27 | xtype: 'textfield', | |
28 | name: me.isCreate ? 'name' : 'rename', | |
29 | fieldLabel: gettext('Name'), | |
30 | allowBlank: false, | |
31 | }, | |
32 | { | |
33 | xtype: 'textfield', | |
34 | name: 'cidr', | |
35 | fieldLabel: gettext('IP/CIDR'), | |
36 | allowBlank: false, | |
37 | }, | |
38 | { | |
39 | xtype: 'textfield', | |
40 | name: 'comment', | |
41 | fieldLabel: gettext('Comment'), | |
42 | }, | |
43 | ], | |
53ebd289 DM |
44 | }); |
45 | ||
46 | Ext.apply(me, { | |
5e7d2723 | 47 | subject: gettext('Alias'), |
53ebd289 | 48 | isAdd: true, |
8058410f | 49 | items: [ipanel], |
53ebd289 DM |
50 | }); |
51 | ||
52 | me.callParent(); | |
53 | ||
d5e771ce | 54 | if (!me.isCreate) { |
53ebd289 | 55 | me.load({ |
a22fc39f | 56 | success: function(response, options) { |
5e7d2723 | 57 | let values = response.result.data; |
53ebd289 DM |
58 | values.rename = values.name; |
59 | ipanel.setValues(values); | |
f6710aac | 60 | }, |
53ebd289 DM |
61 | }); |
62 | } | |
f6710aac | 63 | }, |
53ebd289 DM |
64 | }); |
65 | ||
1774f148 DC |
66 | Ext.define('pve-fw-aliases', { |
67 | extend: 'Ext.data.Model', | |
68 | ||
8058410f | 69 | fields: ['name', 'cidr', 'comment', 'digest'], |
f6710aac | 70 | idProperty: 'name', |
1774f148 DC |
71 | }); |
72 | ||
53ebd289 DM |
73 | Ext.define('PVE.FirewallAliases', { |
74 | extend: 'Ext.grid.Panel', | |
75 | alias: ['widget.pveFirewallAliases'], | |
76 | ||
9a811965 DC |
77 | onlineHelp: 'pve_firewall_ip_aliases', |
78 | ||
123e1c80 DC |
79 | stateful: true, |
80 | stateId: 'grid-firewall-aliases', | |
81 | ||
53ebd289 DM |
82 | base_url: undefined, |
83 | ||
84 | title: gettext('Alias'), | |
85 | ||
8058410f | 86 | initComponent: function() { |
5e7d2723 | 87 | let me = this; |
53ebd289 DM |
88 | |
89 | if (!me.base_url) { | |
90 | throw "missing base_url configuration"; | |
91 | } | |
92 | ||
5e7d2723 | 93 | let store = new Ext.data.Store({ |
1774f148 | 94 | model: 'pve-fw-aliases', |
53ebd289 | 95 | proxy: { |
56a353b9 | 96 | type: 'proxmox', |
f6710aac | 97 | url: "/api2/json" + me.base_url, |
53ebd289 | 98 | }, |
53ebd289 DM |
99 | sorters: { |
100 | property: 'name', | |
392e3cf1 | 101 | direction: 'ASC', |
f6710aac | 102 | }, |
53ebd289 DM |
103 | }); |
104 | ||
5e7d2723 | 105 | let sm = Ext.create('Ext.selection.RowModel', {}); |
53ebd289 | 106 | |
2e37e779 | 107 | let caps = Ext.state.Manager.get('GuiCap'); |
1056e10c | 108 | let canEdit = !!caps.vms['VM.Config.Network'] || !!caps.dc['Sys.Modify'] || !!caps.nodes['Sys.Modify']; |
2e37e779 | 109 | |
5e7d2723 TL |
110 | let reload = function() { |
111 | let oldrec = sm.getSelection()[0]; | |
53ebd289 DM |
112 | store.load(function(records, operation, success) { |
113 | if (oldrec) { | |
8267aa63 | 114 | var rec = store.findRecord('name', oldrec.data.name, 0, false, true, true); |
53ebd289 DM |
115 | if (rec) { |
116 | sm.select(rec); | |
117 | } | |
118 | } | |
119 | }); | |
120 | }; | |
121 | ||
5e7d2723 TL |
122 | let run_editor = function() { |
123 | let rec = me.getSelectionModel().getSelection()[0]; | |
1056e10c | 124 | if (!rec || !canEdit) { |
53ebd289 DM |
125 | return; |
126 | } | |
5e7d2723 | 127 | let win = Ext.create('PVE.FirewallAliasEdit', { |
53ebd289 | 128 | base_url: me.base_url, |
f6710aac | 129 | alias_name: rec.data.name, |
53ebd289 | 130 | }); |
53ebd289 DM |
131 | win.show(); |
132 | win.on('destroy', reload); | |
133 | }; | |
134 | ||
5720fafa | 135 | me.editBtn = new Proxmox.button.Button({ |
53ebd289 DM |
136 | text: gettext('Edit'), |
137 | disabled: true, | |
138 | selModel: sm, | |
1056e10c | 139 | enableFn: rec => canEdit, |
f6710aac | 140 | handler: run_editor, |
53ebd289 DM |
141 | }); |
142 | ||
8058410f | 143 | me.addBtn = Ext.create('Ext.Button', { |
53ebd289 | 144 | text: gettext('Add'), |
2e37e779 | 145 | disabled: !caps.vms['VM.Config.Network'] && !caps.dc['Sys.Modify'] && !caps.nodes['Sys.Modify'], |
53ebd289 DM |
146 | handler: function() { |
147 | var win = Ext.create('PVE.FirewallAliasEdit', { | |
f6710aac | 148 | base_url: me.base_url, |
53ebd289 DM |
149 | }); |
150 | win.on('destroy', reload); | |
151 | win.show(); | |
f6710aac | 152 | }, |
53ebd289 DM |
153 | }); |
154 | ||
3b1ca3ff | 155 | me.removeBtn = Ext.create('Proxmox.button.StdRemoveButton', { |
2e37e779 | 156 | disabled: true, |
53ebd289 | 157 | selModel: sm, |
2e37e779 | 158 | enableFn: rec => !!caps.vms['VM.Config.Network'] || !!caps.dc['Sys.Modify'] || !!caps.nodes['Sys.Modify'], |
3b1ca3ff | 159 | baseurl: me.base_url + '/', |
f6710aac | 160 | callback: reload, |
53ebd289 DM |
161 | }); |
162 | ||
163 | ||
b6f01f84 | 164 | Ext.apply(me, { |
53ebd289 | 165 | store: store, |
8058410f | 166 | tbar: [me.addBtn, me.removeBtn, me.editBtn], |
53ebd289 DM |
167 | selModel: sm, |
168 | columns: [ | |
c10fabfe TL |
169 | { |
170 | header: gettext('Name'), | |
171 | dataIndex: 'name', | |
172 | flex: 1, | |
173 | }, | |
174 | { | |
8058410f | 175 | header: gettext('IP/CIDR'), |
c10fabfe TL |
176 | dataIndex: 'cidr', |
177 | flex: 1, | |
178 | }, | |
179 | { | |
180 | header: gettext('Comment'), | |
181 | dataIndex: 'comment', | |
182 | renderer: Ext.String.htmlEncode, | |
183 | flex: 3, | |
f6710aac | 184 | }, |
53ebd289 DM |
185 | ], |
186 | listeners: { | |
f6710aac TL |
187 | itemdblclick: run_editor, |
188 | }, | |
53ebd289 DM |
189 | }); |
190 | ||
191 | me.callParent(); | |
260c1540 | 192 | me.on('activate', reload); |
f6710aac | 193 | }, |
53ebd289 | 194 | }); |