]>
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 sm
= Ext
.create('Ext.selection.RowModel', {});
47 var reload = function() {
48 var oldrec
= sm
.getSelection()[0];
49 store
.load(function(records
, operation
, success
) {
51 var rec
= store
.findRecord('name', oldrec
.data
.name
, 0, false, true, true);
59 var run_editor = function() {
60 var rec
= sm
.getSelection()[0];
64 var win
= Ext
.create('Proxmox.window.Edit', {
65 subject
: "IPSet '" + rec
.data
.name
+ "'",
68 digest
: rec
.data
.digest
,
79 fieldLabel
: gettext('Name'),
85 value
: rec
.data
.comment
,
86 fieldLabel
: gettext('Comment'),
91 win
.on('destroy', reload
);
94 me
.editBtn
= new Proxmox
.button
.Button({
95 text
: gettext('Edit'),
101 me
.addBtn
= new Proxmox
.button
.Button({
102 text
: gettext('Create'),
103 handler: function() {
105 var win
= Ext
.create('Proxmox.window.Edit', {
114 fieldLabel
: gettext('Name'),
121 fieldLabel
: gettext('Comment'),
126 win
.on('destroy', reload
);
130 me
.removeBtn
= Ext
.create('Proxmox.button.StdRemoveButton', {
132 baseurl
: me
.base_url
+ '/',
138 tbar
: ['<b>IPSet:</b>', me
.addBtn
, me
.removeBtn
, me
.editBtn
],
141 { header
: 'IPSet', dataIndex
: 'name', width
: '100' },
142 { header
: gettext('Comment'), dataIndex
: 'comment', renderer
: Ext
.String
.htmlEncode
, flex
: 1 },
145 itemdblclick
: run_editor
,
146 select: function(_
, rec
) {
147 var url
= me
.base_url
+ '/' + rec
.data
.name
;
148 me
.ipset_panel
.setBaseUrl(url
);
150 deselect: function() {
151 me
.ipset_panel
.setBaseUrl(undefined);
163 Ext
.define('PVE.IPSetCidrEdit', {
164 extend
: 'Proxmox.window.Edit',
168 initComponent: function() {
171 me
.isCreate
= me
.cidr
=== undefined;
175 me
.url
= '/api2/extjs' + me
.base_url
;
178 me
.url
= '/api2/extjs' + me
.base_url
+ '/' + me
.cidr
;
185 if (!me
.list_refs_url
) {
186 throw "no alias_base_url specified";
190 xtype
: 'pveIPRefSelector',
195 base_url
: me
.list_refs_url
,
197 fieldLabel
: gettext('IP/CIDR'),
201 xtype
: 'displayfield',
204 fieldLabel
: gettext('IP/CIDR'),
208 var ipanel
= Ext
.create('Proxmox.panel.InputPanel', {
209 isCreate
: me
.isCreate
,
213 xtype
: 'proxmoxcheckbox',
217 fieldLabel
: 'nomatch',
225 fieldLabel
: gettext('Comment'),
231 subject
: gettext('IP/CIDR'),
239 success: function(response
, options
) {
240 var values
= response
.result
.data
;
241 ipanel
.setValues(values
);
248 Ext
.define('PVE.IPSetGrid', {
249 extend
: 'Ext.grid.Panel',
250 alias
: 'widget.pveIPSetGrid',
253 stateId
: 'grid-firewall-ipsets',
256 list_refs_url
: undefined,
259 removeBtn
: undefined,
262 setBaseUrl: function(url
) {
267 if (url
=== undefined) {
268 me
.addBtn
.setDisabled(true);
269 me
.store
.removeAll();
271 me
.addBtn
.setDisabled(false);
272 me
.removeBtn
.baseurl
= url
+ '/';
275 url
: '/api2/json' + url
,
282 initComponent: function() {
285 if (!me
.list_refs_url
) {
286 throw "no1 list_refs_url specified";
289 var store
= new Ext
.data
.Store({
293 var reload = function() {
297 var sm
= Ext
.create('Ext.selection.RowModel', {});
299 var run_editor = function() {
300 var rec
= sm
.getSelection()[0];
304 var win
= Ext
.create('PVE.IPSetCidrEdit', {
305 base_url
: me
.base_url
,
309 win
.on('destroy', reload
);
312 me
.editBtn
= new Proxmox
.button
.Button({
313 text
: gettext('Edit'),
319 me
.addBtn
= new Proxmox
.button
.Button({
320 text
: gettext('Add'),
322 handler: function() {
326 var win
= Ext
.create('PVE.IPSetCidrEdit', {
327 base_url
: me
.base_url
,
328 list_refs_url
: me
.list_refs_url
,
331 win
.on('destroy', reload
);
335 me
.removeBtn
= Ext
.create('Proxmox.button.StdRemoveButton', {
337 baseurl
: me
.base_url
+ '/',
341 var render_errors = function(value
, metaData
, record
) {
342 var errors
= record
.data
.errors
;
344 var msg
= errors
.cidr
|| errors
.nomatch
;
346 metaData
.tdCls
= 'proxmox-invalid-row';
347 var html
= '<p>' + Ext
.htmlEncode(msg
) + '</p>';
348 metaData
.tdAttr
= 'data-qwidth=600 data-qtitle="ERROR" data-qtip="' +
349 html
.replace(/"/g, '"') + '"';
356 tbar: ['<b
>IP
/CIDR:</b
>', me.addBtn, me.removeBtn, me.editBtn],
360 itemdblclick: run_editor,
364 xtype: 'rownumberer
',
367 header: gettext('IP
/CIDR
'),
370 renderer: function(value, metaData, record) {
371 value = render_errors(value, metaData, record);
372 if (record.data.nomatch) {
373 return '<b
>! </b
>' + value;
379 header: gettext('Comment
'),
380 dataIndex: 'comment
',
382 renderer: function(value) {
383 return Ext.util.Format.htmlEncode(value);
392 me.setBaseUrl(me.base_url); // load
396 Ext.define('pve
-ipset
', {
397 extend: 'Ext
.data
.Model
',
398 fields: [{ name: 'nomatch
', type: 'boolean' },
399 'cidr
', 'comment
', 'errors
'],
404 Ext.define('PVE
.IPSet
', {
405 extend: 'Ext
.panel
.Panel
',
406 alias: 'widget
.pveIPSet
',
410 onlineHelp: 'pve_firewall_ip_sets
',
412 list_refs_url: undefined,
414 initComponent: function() {
417 if (!me.list_refs_url) {
418 throw "no list_refs_url specified";
421 var ipset_panel = Ext.createWidget('pveIPSetGrid
', {
423 list_refs_url: me.list_refs_url,
427 var ipset_list = Ext.createWidget('pveIPSetList
', {
429 ipset_panel: ipset_panel,
430 base_url: me.base_url,
438 items: [ipset_list, ipset_panel],
441 ipset_list.fireEvent('show
', ipset_list);