]>
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() {
26 if (me
.ipset_panel
== undefined) {
27 throw "no rule panel specified";
30 if (me
.base_url
== undefined) {
31 throw "no base_url specified";
34 var store
= new Ext
.data
.Store({
35 model
: 'pve-fw-ipsets',
38 url
: "/api2/json" + me
.base_url
46 var sm
= Ext
.create('Ext.selection.RowModel', {});
48 var reload = function() {
49 var oldrec
= sm
.getSelection()[0];
50 store
.load(function(records
, operation
, success
) {
52 var rec
= store
.findRecord('name', oldrec
.data
.name
);
60 var run_editor = function() {
61 var rec
= sm
.getSelection()[0];
65 var win
= Ext
.create('Proxmox.window.Edit', {
66 subject
: "IPSet '" + rec
.data
.name
+ "'",
69 digest
: rec
.data
.digest
,
80 fieldLabel
: gettext('Name'),
86 value
: rec
.data
.comment
,
87 fieldLabel
: gettext('Comment')
92 win
.on('destroy', reload
);
95 me
.editBtn
= new Proxmox
.button
.Button({
96 text
: gettext('Edit'),
102 me
.addBtn
= new Proxmox
.button
.Button({
103 text
: gettext('Create'),
104 handler: function() {
106 var win
= Ext
.create('Proxmox.window.Edit', {
115 fieldLabel
: gettext('Name'),
122 fieldLabel
: gettext('Comment')
127 win
.on('destroy', reload
);
132 me
.removeBtn
= Ext
.create('Proxmox.button.StdRemoveButton', {
134 baseurl
: me
.base_url
+ '/',
140 tbar
: [ '<b>IPSet:</b>', me
.addBtn
, me
.removeBtn
, me
.editBtn
],
143 { header
: 'IPSet', dataIndex
: 'name', width
: '100' },
144 { header
: gettext('Comment'), dataIndex
: 'comment', renderer
: Ext
.String
.htmlEncode
, flex
: 1 }
147 itemdblclick
: run_editor
,
148 select: function(sm
, rec
) {
149 var url
= me
.base_url
+ '/' + rec
.data
.name
;
150 me
.ipset_panel
.setBaseUrl(url
);
152 deselect: function() {
153 me
.ipset_panel
.setBaseUrl(undefined);
165 Ext
.define('PVE.IPSetCidrEdit', {
166 extend
: 'Proxmox.window.Edit',
170 initComponent : function() {
174 me
.isCreate
= (me
.cidr
=== undefined);
178 me
.url
= '/api2/extjs' + me
.base_url
;
181 me
.url
= '/api2/extjs' + me
.base_url
+ '/' + me
.cidr
;
188 if (!me
.list_refs_url
) {
189 throw "no alias_base_url specified";
193 xtype
: 'pveIPRefSelector',
198 base_url
: me
.list_refs_url
,
200 fieldLabel
: gettext('IP/CIDR')
204 xtype
: 'displayfield',
207 fieldLabel
: gettext('IP/CIDR')
211 var ipanel
= Ext
.create('Proxmox.panel.InputPanel', {
212 isCreate
: me
.isCreate
,
216 xtype
: 'proxmoxcheckbox',
220 fieldLabel
: 'nomatch'
228 fieldLabel
: gettext('Comment')
234 subject
: gettext('IP/CIDR'),
242 success: function(response
, options
) {
243 var values
= response
.result
.data
;
244 ipanel
.setValues(values
);
251 Ext
.define('PVE.IPSetGrid', {
252 extend
: 'Ext.grid.Panel',
253 alias
: 'widget.pveIPSetGrid',
256 stateId
: 'grid-firewall-ipsets',
259 list_refs_url
: undefined,
262 removeBtn
: undefined,
265 setBaseUrl: function(url
) {
270 if (url
=== undefined) {
271 me
.addBtn
.setDisabled(true);
272 me
.store
.removeAll();
274 me
.addBtn
.setDisabled(false);
275 me
.removeBtn
.baseurl
= url
+ '/';
278 url
: '/api2/json' + url
285 initComponent: function() {
288 if (!me
.list_refs_url
) {
289 throw "no1 list_refs_url specified";
292 var store
= new Ext
.data
.Store({
296 var reload = function() {
300 var sm
= Ext
.create('Ext.selection.RowModel', {});
302 var run_editor = function() {
303 var rec
= sm
.getSelection()[0];
307 var win
= Ext
.create('PVE.IPSetCidrEdit', {
308 base_url
: me
.base_url
,
312 win
.on('destroy', reload
);
315 me
.editBtn
= new Proxmox
.button
.Button({
316 text
: gettext('Edit'),
322 me
.addBtn
= new Proxmox
.button
.Button({
323 text
: gettext('Add'),
325 handler: function() {
329 var win
= Ext
.create('PVE.IPSetCidrEdit', {
330 base_url
: me
.base_url
,
331 list_refs_url
: me
.list_refs_url
334 win
.on('destroy', reload
);
338 me
.removeBtn
= Ext
.create('Proxmox.button.StdRemoveButton', {
340 baseurl
: me
.base_url
+ '/',
344 var render_errors = function(value
, metaData
, record
) {
345 var errors
= record
.data
.errors
;
347 var msg
= errors
.cidr
|| errors
.nomatch
;
349 metaData
.tdCls
= 'proxmox-invalid-row';
350 var html
= '<p>' + Ext
.htmlEncode(msg
) + '</p>';
351 metaData
.tdAttr
= 'data-qwidth=600 data-qtitle="ERROR" data-qtip="' +
352 html
.replace(/\"/g,'"') + '"';
359 tbar
: [ '<b>IP/CIDR:</b>', me
.addBtn
, me
.removeBtn
, me
.editBtn
],
363 itemdblclick
: run_editor
370 header
: gettext('IP/CIDR'),
373 renderer: function(value
, metaData
, record
) {
374 value
= render_errors(value
, metaData
, record
);
375 if (record
.data
.nomatch
) {
376 return '<b>! </b>' + value
;
382 header
: gettext('Comment'),
383 dataIndex
: 'comment',
385 renderer: function(value
) {
386 return Ext
.util
.Format
.htmlEncode(value
);
395 me
.setBaseUrl(me
.base_url
); // load
400 Ext
.define('pve-ipset', {
401 extend
: 'Ext.data.Model',
402 fields
: [ { name
: 'nomatch', type
: 'boolean' },
403 'cidr', 'comment', 'errors' ],
409 Ext
.define('PVE.IPSet', {
410 extend
: 'Ext.panel.Panel',
411 alias
: 'widget.pveIPSet',
415 onlineHelp
: 'pve_firewall_ip_sets',
417 list_refs_url
: undefined,
419 initComponent: function() {
422 if (!me
.list_refs_url
) {
423 throw "no list_refs_url specified";
426 var ipset_panel
= Ext
.createWidget('pveIPSetGrid', {
428 list_refs_url
: me
.list_refs_url
,
432 var ipset_list
= Ext
.createWidget('pveIPSetList', {
434 ipset_panel
: ipset_panel
,
435 base_url
: me
.base_url
,
443 items
: [ ipset_list
, ipset_panel
],
446 ipset_list
.fireEvent('show', ipset_list
);