]>
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 | |
5e7d2723 TL |
107 | let reload = function() { |
108 | let oldrec = sm.getSelection()[0]; | |
53ebd289 DM |
109 | store.load(function(records, operation, success) { |
110 | if (oldrec) { | |
8267aa63 | 111 | var rec = store.findRecord('name', oldrec.data.name, 0, false, true, true); |
53ebd289 DM |
112 | if (rec) { |
113 | sm.select(rec); | |
114 | } | |
115 | } | |
116 | }); | |
117 | }; | |
118 | ||
5e7d2723 TL |
119 | let run_editor = function() { |
120 | let rec = me.getSelectionModel().getSelection()[0]; | |
53ebd289 DM |
121 | if (!rec) { |
122 | return; | |
123 | } | |
5e7d2723 | 124 | let win = Ext.create('PVE.FirewallAliasEdit', { |
53ebd289 | 125 | base_url: me.base_url, |
f6710aac | 126 | alias_name: rec.data.name, |
53ebd289 | 127 | }); |
53ebd289 DM |
128 | win.show(); |
129 | win.on('destroy', reload); | |
130 | }; | |
131 | ||
5720fafa | 132 | me.editBtn = new Proxmox.button.Button({ |
53ebd289 DM |
133 | text: gettext('Edit'), |
134 | disabled: true, | |
135 | selModel: sm, | |
f6710aac | 136 | handler: run_editor, |
53ebd289 DM |
137 | }); |
138 | ||
8058410f | 139 | me.addBtn = Ext.create('Ext.Button', { |
53ebd289 DM |
140 | text: gettext('Add'), |
141 | handler: function() { | |
142 | var win = Ext.create('PVE.FirewallAliasEdit', { | |
f6710aac | 143 | base_url: me.base_url, |
53ebd289 DM |
144 | }); |
145 | win.on('destroy', reload); | |
146 | win.show(); | |
f6710aac | 147 | }, |
53ebd289 DM |
148 | }); |
149 | ||
3b1ca3ff | 150 | me.removeBtn = Ext.create('Proxmox.button.StdRemoveButton', { |
53ebd289 | 151 | selModel: sm, |
3b1ca3ff | 152 | baseurl: me.base_url + '/', |
f6710aac | 153 | callback: reload, |
53ebd289 DM |
154 | }); |
155 | ||
156 | ||
b6f01f84 | 157 | Ext.apply(me, { |
53ebd289 | 158 | store: store, |
8058410f | 159 | tbar: [me.addBtn, me.removeBtn, me.editBtn], |
53ebd289 DM |
160 | selModel: sm, |
161 | columns: [ | |
c10fabfe TL |
162 | { |
163 | header: gettext('Name'), | |
164 | dataIndex: 'name', | |
165 | flex: 1, | |
166 | }, | |
167 | { | |
8058410f | 168 | header: gettext('IP/CIDR'), |
c10fabfe TL |
169 | dataIndex: 'cidr', |
170 | flex: 1, | |
171 | }, | |
172 | { | |
173 | header: gettext('Comment'), | |
174 | dataIndex: 'comment', | |
175 | renderer: Ext.String.htmlEncode, | |
176 | flex: 3, | |
f6710aac | 177 | }, |
53ebd289 DM |
178 | ], |
179 | listeners: { | |
f6710aac TL |
180 | itemdblclick: run_editor, |
181 | }, | |
53ebd289 DM |
182 | }); |
183 | ||
184 | me.callParent(); | |
260c1540 | 185 | me.on('activate', reload); |
f6710aac | 186 | }, |
53ebd289 | 187 | }); |