]>
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('PVE.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 PVE
.button
.Button({
96 text
: gettext('Edit'),
102 me
.addBtn
= new PVE
.button
.Button({
103 text
: gettext('Create'),
104 handler: function() {
106 var win
= Ext
.create('PVE.window.Edit', {
115 fieldLabel
: gettext('Name'),
122 fieldLabel
: gettext('Comment')
127 win
.on('destroy', reload
);
132 me
.removeBtn
= new PVE
.button
.Button({
133 text
: gettext('Remove'),
136 handler: function() {
137 var rec
= sm
.getSelection()[0];
138 if (!rec
|| !me
.base_url
) {
141 PVE
.Utils
.API2Request({
142 url
: me
.base_url
+ '/' + rec
.data
.name
,
145 failure: function(response
, options
) {
146 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
155 tbar
: [ '<b>IPSet:</b>', me
.addBtn
, me
.removeBtn
, me
.editBtn
],
158 { header
: 'IPSet', dataIndex
: 'name', width
: '100' },
159 { header
: gettext('Comment'), dataIndex
: 'comment', renderer
: Ext
.String
.htmlEncode
, flex
: 1 }
162 itemdblclick
: run_editor
,
163 select: function(sm
, rec
) {
164 var url
= me
.base_url
+ '/' + rec
.data
.name
;
165 me
.ipset_panel
.setBaseUrl(url
);
167 deselect: function() {
168 me
.ipset_panel
.setBaseUrl(undefined);
180 Ext
.define('PVE.IPSetCidrEdit', {
181 extend
: 'PVE.window.Edit',
185 initComponent : function() {
189 me
.isCreate
= (me
.cidr
=== undefined);
193 me
.url
= '/api2/extjs' + me
.base_url
;
196 me
.url
= '/api2/extjs' + me
.base_url
+ '/' + me
.cidr
;
203 if (!me
.list_refs_url
) {
204 throw "no alias_base_url specified";
208 xtype
: 'pveIPRefSelector',
213 base_url
: me
.list_refs_url
,
215 fieldLabel
: gettext('IP/CIDR')
219 xtype
: 'displayfield',
222 fieldLabel
: gettext('IP/CIDR')
226 var ipanel
= Ext
.create('PVE.panel.InputPanel', {
227 isCreate
: me
.isCreate
,
231 xtype
: 'pvecheckbox',
235 fieldLabel
: 'nomatch'
243 fieldLabel
: gettext('Comment')
249 subject
: gettext('IP/CIDR'),
257 success: function(response
, options
) {
258 var values
= response
.result
.data
;
259 ipanel
.setValues(values
);
266 Ext
.define('PVE.IPSetGrid', {
267 extend
: 'Ext.grid.Panel',
268 alias
: 'widget.pveIPSetGrid',
271 stateId
: 'grid-firewall-ipsets',
274 list_refs_url
: undefined,
277 removeBtn
: undefined,
280 setBaseUrl: function(url
) {
285 if (url
=== undefined) {
286 me
.addBtn
.setDisabled(true);
287 me
.store
.removeAll();
289 me
.addBtn
.setDisabled(false);
292 url
: '/api2/json' + url
299 initComponent: function() {
300 /*jslint confusion: true */
303 if (!me
.list_refs_url
) {
304 throw "no1 list_refs_url specified";
307 var store
= new Ext
.data
.Store({
311 var reload = function() {
315 var sm
= Ext
.create('Ext.selection.RowModel', {});
317 var run_editor = function() {
318 var rec
= sm
.getSelection()[0];
322 var win
= Ext
.create('PVE.IPSetCidrEdit', {
323 base_url
: me
.base_url
,
327 win
.on('destroy', reload
);
330 me
.editBtn
= new PVE
.button
.Button({
331 text
: gettext('Edit'),
337 me
.addBtn
= new PVE
.button
.Button({
338 text
: gettext('Add'),
340 handler: function() {
344 var win
= Ext
.create('PVE.IPSetCidrEdit', {
345 base_url
: me
.base_url
,
346 list_refs_url
: me
.list_refs_url
349 win
.on('destroy', reload
);
353 me
.removeBtn
= new PVE
.button
.Button({
354 text
: gettext('Remove'),
357 handler: function() {
358 var rec
= sm
.getSelection()[0];
359 if (!rec
|| !me
.base_url
) {
363 PVE
.Utils
.API2Request({
364 url
: me
.base_url
+ '/' + rec
.data
.cidr
,
367 failure: function(response
, options
) {
368 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
375 var render_errors = function(value
, metaData
, record
) {
376 var errors
= record
.data
.errors
;
378 var msg
= errors
.cidr
|| errors
.nomatch
;
380 metaData
.tdCls
= 'proxmox-invalid-row';
381 var html
= '<p>' + Ext
.htmlEncode(msg
) + '</p>';
382 metaData
.tdAttr
= 'data-qwidth=600 data-qtitle="ERROR" data-qtip="' +
383 html
.replace(/\"/g,'"') + '"';
390 tbar
: [ '<b>IP/CIDR:</b>', me
.addBtn
, me
.removeBtn
, me
.editBtn
],
394 itemdblclick
: run_editor
401 header
: gettext('IP/CIDR'),
404 renderer: function(value
, metaData
, record
) {
405 value
= render_errors(value
, metaData
, record
);
406 if (record
.data
.nomatch
) {
407 return '<b>! </b>' + value
;
413 header
: gettext('Comment'),
414 dataIndex
: 'comment',
416 renderer: function(value
) {
417 return Ext
.util
.Format
.htmlEncode(value
);
426 me
.setBaseUrl(me
.base_url
); // load
431 Ext
.define('pve-ipset', {
432 extend
: 'Ext.data.Model',
433 fields
: [ { name
: 'nomatch', type
: 'boolean' },
434 'cidr', 'comment', 'errors' ],
440 Ext
.define('PVE.IPSet', {
441 extend
: 'Ext.panel.Panel',
442 alias
: 'widget.pveIPSet',
446 onlineHelp
: 'pve_firewall_ip_sets',
448 list_refs_url
: undefined,
450 initComponent: function() {
453 if (!me
.list_refs_url
) {
454 throw "no list_refs_url specified";
457 var ipset_panel
= Ext
.createWidget('pveIPSetGrid', {
459 list_refs_url
: me
.list_refs_url
,
463 var ipset_list
= Ext
.createWidget('pveIPSetList', {
465 ipset_panel
: ipset_panel
,
466 base_url
: me
.base_url
,
474 items
: [ ipset_list
, ipset_panel
],
477 ipset_list
.fireEvent('show', ipset_list
);