]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/grid/FirewallAliases.js
ui: firewall: refactor privilege checks and prevent double click
[pve-manager.git] / www / manager6 / grid / FirewallAliases.js
CommitLineData
53ebd289 1Ext.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
66Ext.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
73Ext.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});