]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/dc/SecurityGroups.js
1 Ext
.define('pve-security-groups', {
2 extend
: 'Ext.data.Model',
4 fields
: ['group', 'comment', 'digest'],
8 Ext
.define('PVE.SecurityGroupEdit', {
9 extend
: 'Proxmox.window.Edit',
11 base_url
: "/cluster/firewall/groups",
15 initComponent: function() {
18 me
.isCreate
= me
.group_name
=== undefined;
22 me
.url
= '/api2/extjs' + me
.base_url
;
29 value
: me
.group_name
|| '',
30 fieldLabel
: gettext('Name'),
36 value
: me
.group_comment
|| '',
37 fieldLabel
: gettext('Comment'),
42 subject
= gettext('Security Group');
44 subject
= gettext('Security Group') + " '" + me
.group_name
+ "'";
52 var ipanel
= Ext
.create('Proxmox.panel.InputPanel', {
53 // InputPanel does not have a 'create' property, does it need a 'isCreate'
54 isCreate
: me
.isCreate
,
68 Ext
.define('PVE.SecurityGroupList', {
69 extend
: 'Ext.grid.Panel',
70 alias
: 'widget.pveSecurityGroupList',
73 stateId
: 'grid-securitygroups',
81 base_url
: "/cluster/firewall/groups",
83 initComponent: function() {
86 throw "no base_url specified";
89 let store
= new Ext
.data
.Store({
90 model
: 'pve-security-groups',
93 url
: '/api2/json' + me
.base_url
,
101 let sm
= Ext
.create('Ext.selection.RowModel', {});
103 let caps
= Ext
.state
.Manager
.get('GuiCap');
104 let canEdit
= !!caps
.dc
['Sys.Modify'];
106 let reload = function() {
107 let oldrec
= sm
.getSelection()[0];
108 store
.load((records
, operation
, success
) => {
110 let rec
= store
.findRecord('group', oldrec
.data
.group
, 0, false, true, true);
118 let run_editor = function() {
119 let rec
= sm
.getSelection()[0];
120 if (!rec
|| !canEdit
) {
123 Ext
.create('PVE.SecurityGroupEdit', {
124 digest
: rec
.data
.digest
,
125 group_name
: rec
.data
.group
,
126 group_comment
: rec
.data
.comment
,
128 destroy
: () => reload(),
134 me
.editBtn
= new Proxmox
.button
.Button({
135 text
: gettext('Edit'),
136 enableFn
: rec
=> canEdit
,
141 me
.addBtn
= new Proxmox
.button
.Button({
142 text
: gettext('Create'),
144 handler: function() {
146 var win
= Ext
.create('PVE.SecurityGroupEdit', {});
148 win
.on('destroy', reload
);
152 me
.removeBtn
= Ext
.create('Proxmox.button.StdRemoveButton', {
154 baseurl
: me
.base_url
+ '/',
155 enableFn
: (rec
) => canEdit
&& rec
&& me
.base_url
,
156 callback
: () => reload(),
161 tbar
: ['<b>' + gettext('Group') + ':</b>', me
.addBtn
, me
.removeBtn
, me
.editBtn
],
165 header
: gettext('Group'),
170 header
: gettext('Comment'),
171 dataIndex
: 'comment',
172 renderer
: Ext
.String
.htmlEncode
,
177 itemdblclick
: run_editor
,
178 select: function(_sm
, rec
) {
180 me
.rulePanel
= me
.up('panel').down('pveFirewallRules');
182 me
.rulePanel
.setBaseUrl(`/cluster/firewall/groups/${rec.data.group}`);
184 deselect: function() {
186 me
.rulePanel
= me
.up('panel').down('pveFirewallRules');
188 me
.rulePanel
.setBaseUrl(undefined);
200 Ext
.define('PVE.SecurityGroups', {
201 extend
: 'Ext.panel.Panel',
202 alias
: 'widget.pveSecurityGroups',
204 title
: 'Security Groups',
205 onlineHelp
: 'pve_firewall_security_groups',
211 xtype
: 'pveFirewallRules',
214 list_refs_url
: '/cluster/firewall/refs',
215 tbar_prefix
: '<b>' + gettext('Rules') + ':</b>',
219 xtype
: 'pveSecurityGroupList',
228 let sglist
= this.down('pveSecurityGroupList');
229 sglist
.fireEvent('show', sglist
);