]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/panel/IPSet.js
1 Ext
.define('pve-fw-ipsets', {
2 extend
: 'Ext.data.Model',
3 fields
: ['name', 'comment', 'digest'],
7 Ext
.define('PVE.IPSetList', {
8 extend
: 'Ext.grid.Panel',
9 alias
: 'widget.pveIPSetList',
12 stateId
: 'grid-firewall-ipsetlist',
14 ipset_panel
: undefined,
22 initComponent: function() {
25 if (typeof me
.ipset_panel
=== 'undefined') {
26 throw "no rule panel specified";
29 if (typeof me
.ipset_panel
=== 'undefined') {
30 throw "no base_url specified";
33 var store
= new Ext
.data
.Store({
34 model
: 'pve-fw-ipsets',
37 url
: "/api2/json" + me
.base_url
,
45 var caps
= Ext
.state
.Manager
.get('GuiCap');
47 var sm
= Ext
.create('Ext.selection.RowModel', {});
49 var reload = function() {
50 var oldrec
= sm
.getSelection()[0];
51 store
.load(function(records
, operation
, success
) {
53 var rec
= store
.findRecord('name', oldrec
.data
.name
, 0, false, true, true);
61 var run_editor = function() {
62 var rec
= sm
.getSelection()[0];
66 var win
= Ext
.create('Proxmox.window.Edit', {
67 subject
: "IPSet '" + rec
.data
.name
+ "'",
70 digest
: rec
.data
.digest
,
81 fieldLabel
: gettext('Name'),
87 value
: rec
.data
.comment
,
88 fieldLabel
: gettext('Comment'),
93 win
.on('destroy', reload
);
96 me
.editBtn
= new Proxmox
.button
.Button({
97 text
: gettext('Edit'),
99 enableFn
: rec
=> !!caps
.vms
['VM.Config.Network'] || !!caps
.dc
['Sys.Modify'] || !!caps
.nodes
['Sys.Modify'],
104 me
.addBtn
= new Proxmox
.button
.Button({
105 text
: gettext('Create'),
106 handler: function() {
108 var win
= Ext
.create('Proxmox.window.Edit', {
117 fieldLabel
: gettext('Name'),
124 fieldLabel
: gettext('Comment'),
129 win
.on('destroy', reload
);
133 me
.removeBtn
= Ext
.create('Proxmox.button.StdRemoveButton', {
134 enableFn
: rec
=> !!caps
.vms
['VM.Config.Network'] || !!caps
.dc
['Sys.Modify'] || !!caps
.nodes
['Sys.Modify'],
136 baseurl
: me
.base_url
+ '/',
142 tbar
: ['<b>IPSet:</b>', me
.addBtn
, me
.removeBtn
, me
.editBtn
],
145 { header
: 'IPSet', dataIndex
: 'name', width
: '100' },
146 { header
: gettext('Comment'), dataIndex
: 'comment', renderer
: Ext
.String
.htmlEncode
, flex
: 1 },
149 itemdblclick
: run_editor
,
150 select: function(_
, rec
) {
151 var url
= me
.base_url
+ '/' + rec
.data
.name
;
152 me
.ipset_panel
.setBaseUrl(url
);
154 deselect: function() {
155 me
.ipset_panel
.setBaseUrl(undefined);
161 if (!caps
.vms
['VM.Config.Network'] && !caps
.dc
['Sys.Modify'] && !caps
.nodes
['Sys.Modify']) {
162 me
.addBtn
.setDisabled(true);
171 Ext
.define('PVE.IPSetCidrEdit', {
172 extend
: 'Proxmox.window.Edit',
176 initComponent: function() {
179 me
.isCreate
= me
.cidr
=== undefined;
183 me
.url
= '/api2/extjs' + me
.base_url
;
186 me
.url
= '/api2/extjs' + me
.base_url
+ '/' + me
.cidr
;
193 if (!me
.list_refs_url
) {
194 throw "no alias_base_url specified";
198 xtype
: 'pveIPRefSelector',
203 base_url
: me
.list_refs_url
,
205 fieldLabel
: gettext('IP/CIDR'),
209 xtype
: 'displayfield',
212 fieldLabel
: gettext('IP/CIDR'),
216 var ipanel
= Ext
.create('Proxmox.panel.InputPanel', {
217 isCreate
: me
.isCreate
,
221 xtype
: 'proxmoxcheckbox',
225 fieldLabel
: 'nomatch',
233 fieldLabel
: gettext('Comment'),
239 subject
: gettext('IP/CIDR'),
247 success: function(response
, options
) {
248 var values
= response
.result
.data
;
249 ipanel
.setValues(values
);
256 Ext
.define('PVE.IPSetGrid', {
257 extend
: 'Ext.grid.Panel',
258 alias
: 'widget.pveIPSetGrid',
261 stateId
: 'grid-firewall-ipsets',
264 list_refs_url
: undefined,
267 removeBtn
: undefined,
270 setBaseUrl: function(url
) {
275 if (url
=== undefined) {
276 me
.addBtn
.setDisabled(true);
277 me
.store
.removeAll();
279 if (me
.caps
.vms
['VM.Config.Network'] || me
.caps
.dc
['Sys.Modify'] || me
.caps
.nodes
['Sys.Modify']) {
280 me
.addBtn
.setDisabled(false);
282 me
.removeBtn
.baseurl
= url
+ '/';
285 url
: '/api2/json' + url
,
292 initComponent: function() {
295 if (!me
.list_refs_url
) {
296 throw "no1 list_refs_url specified";
299 var store
= new Ext
.data
.Store({
303 var reload = function() {
307 var sm
= Ext
.create('Ext.selection.RowModel', {});
309 me
.caps
= Ext
.state
.Manager
.get('GuiCap');
311 var run_editor = function() {
312 var rec
= sm
.getSelection()[0];
316 var win
= Ext
.create('PVE.IPSetCidrEdit', {
317 base_url
: me
.base_url
,
321 win
.on('destroy', reload
);
324 me
.editBtn
= new Proxmox
.button
.Button({
325 text
: gettext('Edit'),
327 enableFn
: rec
=> !!me
.caps
.vms
['VM.Config.Network'] || !!me
.caps
.dc
['Sys.Modify'] || !!me
.caps
.nodes
['Sys.Modify'],
332 me
.addBtn
= new Proxmox
.button
.Button({
333 text
: gettext('Add'),
335 enableFn
: rec
=> !!me
.caps
.vms
['VM.Config.Network'] || !!me
.caps
.dc
['Sys.Modify'] || !!me
.caps
.nodes
['Sys.Modify'],
336 handler: function() {
340 var win
= Ext
.create('PVE.IPSetCidrEdit', {
341 base_url
: me
.base_url
,
342 list_refs_url
: me
.list_refs_url
,
345 win
.on('destroy', reload
);
349 me
.removeBtn
= Ext
.create('Proxmox.button.StdRemoveButton', {
351 enableFn
: rec
=> !!me
.caps
.vms
['VM.Config.Network'] || !!me
.caps
.dc
['Sys.Modify'] || !!me
.caps
.nodes
['Sys.Modify'],
353 baseurl
: me
.base_url
+ '/',
357 var render_errors = function(value
, metaData
, record
) {
358 var errors
= record
.data
.errors
;
360 var msg
= errors
.cidr
|| errors
.nomatch
;
362 metaData
.tdCls
= 'proxmox-invalid-row';
363 var html
= '<p>' + Ext
.htmlEncode(msg
) + '</p>';
364 metaData
.tdAttr
= 'data-qwidth=600 data-qtitle="ERROR" data-qtip="' +
365 html
.replace(/"/g, '"') + '"';
372 tbar: ['<b
>IP
/CIDR:</b
>', me.addBtn, me.removeBtn, me.editBtn],
376 itemdblclick: run_editor,
380 xtype: 'rownumberer
',
383 header: gettext('IP
/CIDR
'),
386 renderer: function(value, metaData, record) {
387 value = render_errors(value, metaData, record);
388 if (record.data.nomatch) {
389 return '<b
>! </b
>' + value;
395 header: gettext('Comment
'),
396 dataIndex: 'comment
',
398 renderer: function(value) {
399 return Ext.util.Format.htmlEncode(value);
408 me.setBaseUrl(me.base_url); // load
412 Ext.define('pve
-ipset
', {
413 extend: 'Ext
.data
.Model
',
414 fields: [{ name: 'nomatch
', type: 'boolean' },
415 'cidr
', 'comment
', 'errors
'],
420 Ext.define('PVE
.IPSet
', {
421 extend: 'Ext
.panel
.Panel
',
422 alias: 'widget
.pveIPSet
',
426 onlineHelp: 'pve_firewall_ip_sets
',
428 list_refs_url: undefined,
430 initComponent: function() {
433 if (!me.list_refs_url) {
434 throw "no list_refs_url specified";
437 var ipset_panel = Ext.createWidget('pveIPSetGrid
', {
439 list_refs_url: me.list_refs_url,
443 var ipset_list = Ext.createWidget('pveIPSetList
', {
445 ipset_panel: ipset_panel,
446 base_url: me.base_url,
454 items: [ipset_list, ipset_panel],
457 ipset_list.fireEvent('show
', ipset_list);