]>
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');
46 let canEdit
= !!caps
.vms
['VM.Config.Network'] || !!caps
.dc
['Sys.Modify'] || !!caps
.nodes
['Sys.Modify'];
48 var sm
= Ext
.create('Ext.selection.RowModel', {});
50 var reload = function() {
51 var oldrec
= sm
.getSelection()[0];
52 store
.load(function(records
, operation
, success
) {
54 var rec
= store
.findRecord('name', oldrec
.data
.name
, 0, false, true, true);
62 var run_editor = function() {
63 var rec
= sm
.getSelection()[0];
64 if (!rec
|| !canEdit
) {
67 var win
= Ext
.create('Proxmox.window.Edit', {
68 subject
: "IPSet '" + rec
.data
.name
+ "'",
71 digest
: rec
.data
.digest
,
82 fieldLabel
: gettext('Name'),
88 value
: rec
.data
.comment
,
89 fieldLabel
: gettext('Comment'),
94 win
.on('destroy', reload
);
97 me
.editBtn
= new Proxmox
.button
.Button({
98 text
: gettext('Edit'),
100 enableFn
: rec
=> canEdit
,
105 me
.addBtn
= new Proxmox
.button
.Button({
106 text
: gettext('Create'),
107 handler: function() {
109 var win
= Ext
.create('Proxmox.window.Edit', {
118 fieldLabel
: gettext('Name'),
125 fieldLabel
: gettext('Comment'),
130 win
.on('destroy', reload
);
134 me
.removeBtn
= Ext
.create('Proxmox.button.StdRemoveButton', {
135 enableFn
: rec
=> canEdit
,
137 baseurl
: me
.base_url
+ '/',
143 tbar
: ['<b>IPSet:</b>', me
.addBtn
, me
.removeBtn
, me
.editBtn
],
146 { header
: 'IPSet', dataIndex
: 'name', width
: '100' },
147 { header
: gettext('Comment'), dataIndex
: 'comment', renderer
: Ext
.String
.htmlEncode
, flex
: 1 },
150 itemdblclick
: run_editor
,
151 select: function(_
, rec
) {
152 var url
= me
.base_url
+ '/' + rec
.data
.name
;
153 me
.ipset_panel
.setBaseUrl(url
);
155 deselect: function() {
156 me
.ipset_panel
.setBaseUrl(undefined);
163 me
.addBtn
.setDisabled(true);
172 Ext
.define('PVE.IPSetCidrEdit', {
173 extend
: 'Proxmox.window.Edit',
177 initComponent: function() {
180 me
.isCreate
= me
.cidr
=== undefined;
184 me
.url
= '/api2/extjs' + me
.base_url
;
187 me
.url
= '/api2/extjs' + me
.base_url
+ '/' + me
.cidr
;
194 if (!me
.list_refs_url
) {
195 throw "no alias_base_url specified";
199 xtype
: 'pveIPRefSelector',
204 base_url
: me
.list_refs_url
,
207 fieldLabel
: gettext('IP/CIDR'),
211 xtype
: 'displayfield',
214 fieldLabel
: gettext('IP/CIDR'),
218 var ipanel
= Ext
.create('Proxmox.panel.InputPanel', {
219 isCreate
: me
.isCreate
,
223 xtype
: 'proxmoxcheckbox',
227 fieldLabel
: 'nomatch',
235 fieldLabel
: gettext('Comment'),
241 subject
: gettext('IP/CIDR'),
249 success: function(response
, options
) {
250 var values
= response
.result
.data
;
251 ipanel
.setValues(values
);
258 Ext
.define('PVE.IPSetGrid', {
259 extend
: 'Ext.grid.Panel',
260 alias
: 'widget.pveIPSetGrid',
263 stateId
: 'grid-firewall-ipsets',
266 list_refs_url
: undefined,
269 removeBtn
: undefined,
272 setBaseUrl: function(url
) {
277 if (url
=== undefined) {
278 me
.addBtn
.setDisabled(true);
279 me
.store
.removeAll();
282 me
.addBtn
.setDisabled(false);
284 me
.removeBtn
.baseurl
= url
+ '/';
287 url
: '/api2/json' + url
,
294 initComponent: function() {
297 if (!me
.list_refs_url
) {
298 throw "no1 list_refs_url specified";
301 var store
= new Ext
.data
.Store({
305 var reload = function() {
309 var sm
= Ext
.create('Ext.selection.RowModel', {});
311 me
.caps
= Ext
.state
.Manager
.get('GuiCap');
312 me
.canEdit
= !!me
.caps
.vms
['VM.Config.Network'] || !!me
.caps
.dc
['Sys.Modify'] || !!me
.caps
.nodes
['Sys.Modify'];
314 var run_editor = function() {
315 var rec
= sm
.getSelection()[0];
316 if (!rec
|| !me
.canEdit
) {
319 var win
= Ext
.create('PVE.IPSetCidrEdit', {
320 base_url
: me
.base_url
,
324 win
.on('destroy', reload
);
327 me
.editBtn
= new Proxmox
.button
.Button({
328 text
: gettext('Edit'),
330 enableFn
: rec
=> me
.canEdit
,
335 me
.addBtn
= new Proxmox
.button
.Button({
336 text
: gettext('Add'),
338 enableFn
: rec
=> me
.canEdit
,
339 handler: function() {
343 var win
= Ext
.create('PVE.IPSetCidrEdit', {
344 base_url
: me
.base_url
,
345 list_refs_url
: me
.list_refs_url
,
348 win
.on('destroy', reload
);
352 me
.removeBtn
= Ext
.create('Proxmox.button.StdRemoveButton', {
354 enableFn
: rec
=> me
.canEdit
,
356 baseurl
: me
.base_url
+ '/',
360 var render_errors = function(value
, metaData
, record
) {
361 var errors
= record
.data
.errors
;
363 var msg
= errors
.cidr
|| errors
.nomatch
;
365 metaData
.tdCls
= 'proxmox-invalid-row';
366 var html
= '<p>' + Ext
.htmlEncode(msg
) + '</p>';
367 metaData
.tdAttr
= 'data-qwidth=600 data-qtitle="ERROR" data-qtip="' +
368 html
.replace(/"/g, '"') + '"';
375 tbar: ['<b
>IP
/CIDR:</b
>', me.addBtn, me.removeBtn, me.editBtn],
379 itemdblclick: run_editor,
383 xtype: 'rownumberer
',
386 header: gettext('IP
/CIDR
'),
389 renderer: function(value, metaData, record) {
390 value = render_errors(value, metaData, record);
391 if (record.data.nomatch) {
392 return '<b
>! </b
>' + value;
398 header: gettext('Comment
'),
399 dataIndex: 'comment
',
401 renderer: function(value) {
402 return Ext.util.Format.htmlEncode(value);
411 me.setBaseUrl(me.base_url); // load
415 Ext.define('pve
-ipset
', {
416 extend: 'Ext
.data
.Model
',
417 fields: [{ name: 'nomatch
', type: 'boolean' },
418 'cidr
', 'comment
', 'errors
'],
423 Ext.define('PVE
.IPSet
', {
424 extend: 'Ext
.panel
.Panel
',
425 alias: 'widget
.pveIPSet
',
429 onlineHelp: 'pve_firewall_ip_sets
',
431 list_refs_url: undefined,
433 initComponent: function() {
436 if (!me.list_refs_url) {
437 throw "no list_refs_url specified";
440 var ipset_panel = Ext.createWidget('pveIPSetGrid
', {
442 list_refs_url: me.list_refs_url,
446 var ipset_list = Ext.createWidget('pveIPSetList
', {
448 ipset_panel: ipset_panel,
449 base_url: me.base_url,
457 items: [ipset_list, ipset_panel],
460 ipset_list.fireEvent('show
', ipset_list);