]>
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
],
153 header
: gettext('Comment'),
154 dataIndex
: 'comment',
155 renderer
: Ext
.String
.htmlEncode
,
160 itemdblclick
: run_editor
,
161 select: function(_
, rec
) {
162 var url
= me
.base_url
+ '/' + rec
.data
.name
;
163 me
.ipset_panel
.setBaseUrl(url
);
165 deselect: function() {
166 me
.ipset_panel
.setBaseUrl(undefined);
173 me
.addBtn
.setDisabled(true);
182 Ext
.define('PVE.IPSetCidrEdit', {
183 extend
: 'Proxmox.window.Edit',
187 initComponent: function() {
190 me
.isCreate
= me
.cidr
=== undefined;
194 me
.url
= '/api2/extjs' + me
.base_url
;
197 me
.url
= '/api2/extjs' + me
.base_url
+ '/' + me
.cidr
;
204 if (!me
.list_refs_url
) {
205 throw "no alias_base_url specified";
209 xtype
: 'pveIPRefSelector',
214 base_url
: me
.list_refs_url
,
216 fieldLabel
: gettext('IP/CIDR'),
220 xtype
: 'displayfield',
223 fieldLabel
: gettext('IP/CIDR'),
227 var ipanel
= Ext
.create('Proxmox.panel.InputPanel', {
228 isCreate
: me
.isCreate
,
232 xtype
: 'proxmoxcheckbox',
236 fieldLabel
: 'nomatch',
244 fieldLabel
: gettext('Comment'),
250 subject
: gettext('IP/CIDR'),
258 success: function(response
, options
) {
259 var values
= response
.result
.data
;
260 ipanel
.setValues(values
);
267 Ext
.define('PVE.IPSetGrid', {
268 extend
: 'Ext.grid.Panel',
269 alias
: 'widget.pveIPSetGrid',
272 stateId
: 'grid-firewall-ipsets',
275 list_refs_url
: undefined,
278 removeBtn
: undefined,
281 setBaseUrl: function(url
) {
286 if (url
=== undefined) {
287 me
.addBtn
.setDisabled(true);
288 me
.store
.removeAll();
291 me
.addBtn
.setDisabled(false);
293 me
.removeBtn
.baseurl
= url
+ '/';
296 url
: '/api2/json' + url
,
303 initComponent: function() {
306 if (!me
.list_refs_url
) {
307 throw "no1 list_refs_url specified";
310 var store
= new Ext
.data
.Store({
314 var reload = function() {
318 var sm
= Ext
.create('Ext.selection.RowModel', {});
320 me
.caps
= Ext
.state
.Manager
.get('GuiCap');
321 me
.canEdit
= !!me
.caps
.vms
['VM.Config.Network'] || !!me
.caps
.dc
['Sys.Modify'] || !!me
.caps
.nodes
['Sys.Modify'];
323 var run_editor = function() {
324 var rec
= sm
.getSelection()[0];
325 if (!rec
|| !me
.canEdit
) {
328 var win
= Ext
.create('PVE.IPSetCidrEdit', {
329 base_url
: me
.base_url
,
333 win
.on('destroy', reload
);
336 me
.editBtn
= new Proxmox
.button
.Button({
337 text
: gettext('Edit'),
339 enableFn
: rec
=> me
.canEdit
,
344 me
.addBtn
= new Proxmox
.button
.Button({
345 text
: gettext('Add'),
347 enableFn
: rec
=> me
.canEdit
,
348 handler: function() {
352 var win
= Ext
.create('PVE.IPSetCidrEdit', {
353 base_url
: me
.base_url
,
354 list_refs_url
: me
.list_refs_url
,
357 win
.on('destroy', reload
);
361 me
.removeBtn
= Ext
.create('Proxmox.button.StdRemoveButton', {
363 enableFn
: rec
=> me
.canEdit
,
365 baseurl
: me
.base_url
+ '/',
369 var render_errors = function(value
, metaData
, record
) {
370 var errors
= record
.data
.errors
;
372 var msg
= errors
.cidr
|| errors
.nomatch
;
374 metaData
.tdCls
= 'proxmox-invalid-row';
375 var html
= '<p>' + Ext
.htmlEncode(msg
) + '</p>';
376 metaData
.tdAttr
= 'data-qwidth=600 data-qtitle="ERROR" data-qtip="' +
377 html
.replace(/"/g, '"') + '"';
384 tbar: ['<b
>IP
/CIDR:</b
>', me.addBtn, me.removeBtn, me.editBtn],
388 itemdblclick: run_editor,
392 xtype: 'rownumberer
',
393 // cannot use width on instantiation as rownumberer hard-wires that in the
394 // constructor to avoid being overridden by applyDefaults
398 header: gettext('IP
/CIDR
'),
402 renderer: function(value, metaData, record) {
403 value = render_errors(value, metaData, record);
404 if (record.data.nomatch) {
405 return '<b
>! </b
>' + value;
411 header: gettext('Comment
'),
412 dataIndex: 'comment
',
414 renderer: function(value) {
415 return Ext.util.Format.htmlEncode(value);
424 me.setBaseUrl(me.base_url); // load
428 Ext.define('pve
-ipset
', {
429 extend: 'Ext
.data
.Model
',
430 fields: [{ name: 'nomatch
', type: 'boolean' },
431 'cidr
', 'comment
', 'errors
'],
436 Ext.define('PVE
.IPSet
', {
437 extend: 'Ext
.panel
.Panel
',
438 alias: 'widget
.pveIPSet
',
442 onlineHelp: 'pve_firewall_ip_sets
',
444 list_refs_url: undefined,
446 initComponent: function() {
449 if (!me.list_refs_url) {
450 throw "no list_refs_url specified";
453 var ipset_panel = Ext.createWidget('pveIPSetGrid
', {
455 list_refs_url: me.list_refs_url,
459 var ipset_list = Ext.createWidget('pveIPSetList
', {
461 ipset_panel: ipset_panel,
462 base_url: me.base_url,
470 items: [ipset_list, ipset_panel],
473 ipset_list.fireEvent('show
', ipset_list);