]>
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() {
286 /*jslint confusion: true */
289 if (!me
.list_refs_url
) {
290 throw "no1 list_refs_url specified";
293 var store
= new Ext
.data
.Store({
297 var reload = function() {
301 var sm
= Ext
.create('Ext.selection.RowModel', {});
303 var run_editor = function() {
304 var rec
= sm
.getSelection()[0];
308 var win
= Ext
.create('PVE.IPSetCidrEdit', {
309 base_url
: me
.base_url
,
313 win
.on('destroy', reload
);
316 me
.editBtn
= new Proxmox
.button
.Button({
317 text
: gettext('Edit'),
323 me
.addBtn
= new Proxmox
.button
.Button({
324 text
: gettext('Add'),
326 handler: function() {
330 var win
= Ext
.create('PVE.IPSetCidrEdit', {
331 base_url
: me
.base_url
,
332 list_refs_url
: me
.list_refs_url
335 win
.on('destroy', reload
);
339 me
.removeBtn
= Ext
.create('Proxmox.button.StdRemoveButton', {
341 baseurl
: me
.base_url
+ '/',
345 var render_errors = function(value
, metaData
, record
) {
346 var errors
= record
.data
.errors
;
348 var msg
= errors
.cidr
|| errors
.nomatch
;
350 metaData
.tdCls
= 'proxmox-invalid-row';
351 var html
= '<p>' + Ext
.htmlEncode(msg
) + '</p>';
352 metaData
.tdAttr
= 'data-qwidth=600 data-qtitle="ERROR" data-qtip="' +
353 html
.replace(/\"/g,'"') + '"';
360 tbar
: [ '<b>IP/CIDR:</b>', me
.addBtn
, me
.removeBtn
, me
.editBtn
],
364 itemdblclick
: run_editor
371 header
: gettext('IP/CIDR'),
374 renderer: function(value
, metaData
, record
) {
375 value
= render_errors(value
, metaData
, record
);
376 if (record
.data
.nomatch
) {
377 return '<b>! </b>' + value
;
383 header
: gettext('Comment'),
384 dataIndex
: 'comment',
386 renderer: function(value
) {
387 return Ext
.util
.Format
.htmlEncode(value
);
396 me
.setBaseUrl(me
.base_url
); // load
401 Ext
.define('pve-ipset', {
402 extend
: 'Ext.data.Model',
403 fields
: [ { name
: 'nomatch', type
: 'boolean' },
404 'cidr', 'comment', 'errors' ],
410 Ext
.define('PVE.IPSet', {
411 extend
: 'Ext.panel.Panel',
412 alias
: 'widget.pveIPSet',
416 onlineHelp
: 'pve_firewall_ip_sets',
418 list_refs_url
: undefined,
420 initComponent: function() {
423 if (!me
.list_refs_url
) {
424 throw "no list_refs_url specified";
427 var ipset_panel
= Ext
.createWidget('pveIPSetGrid', {
429 list_refs_url
: me
.list_refs_url
,
433 var ipset_list
= Ext
.createWidget('pveIPSetList', {
435 ipset_panel
: ipset_panel
,
436 base_url
: me
.base_url
,
444 items
: [ ipset_list
, ipset_panel
],
447 ipset_list
.fireEvent('show', ipset_list
);