2018-01-15 15:18:06 +01:00
Ext . define ( 'pve-security-groups' , {
extend : 'Ext.data.Model' ,
2021-01-19 17:39:15 +01:00
fields : [ 'group' , 'comment' , 'digest' ] ,
2021-01-19 17:31:03 +01:00
idProperty : 'group' ,
2018-01-15 15:18:06 +01:00
} ) ;
2015-06-16 17:42:36 +02:00
Ext . define ( 'PVE.SecurityGroupEdit' , {
2017-12-06 18:12:41 +01:00
extend : 'Proxmox.window.Edit' ,
2015-06-16 17:42:36 +02:00
base _url : "/cluster/firewall/groups" ,
allow _iface : false ,
2021-01-19 17:39:15 +01:00
initComponent : function ( ) {
2015-06-16 17:42:36 +02:00
var me = this ;
2021-01-19 17:42:36 +01:00
me . isCreate = me . group _name === undefined ;
2015-06-16 17:42:36 +02:00
var subject ;
me . url = '/api2/extjs' + me . base _url ;
me . method = 'POST' ;
2021-01-19 17:29:55 +01:00
var items = [
2015-06-16 17:42:36 +02:00
{
xtype : 'textfield' ,
name : 'group' ,
value : me . group _name || '' ,
fieldLabel : gettext ( 'Name' ) ,
2021-01-19 17:31:03 +01:00
allowBlank : false ,
2015-06-16 17:42:36 +02:00
} ,
{
xtype : 'textfield' ,
name : 'comment' ,
value : me . group _comment || '' ,
2021-01-19 17:31:03 +01:00
fieldLabel : gettext ( 'Comment' ) ,
} ,
2015-06-16 17:42:36 +02:00
] ;
2017-02-28 14:26:49 +01:00
if ( me . isCreate ) {
2015-06-16 17:42:36 +02:00
subject = gettext ( 'Security Group' ) ;
} else {
subject = gettext ( 'Security Group' ) + " '" + me . group _name + "'" ;
items . push ( {
xtype : 'hiddenfield' ,
name : 'rename' ,
2021-01-19 17:31:03 +01:00
value : me . group _name ,
2015-06-16 17:42:36 +02:00
} ) ;
}
2017-12-11 16:10:13 +01:00
var ipanel = Ext . create ( 'Proxmox.panel.InputPanel' , {
2017-02-28 14:26:49 +01:00
// InputPanel does not have a 'create' property, does it need a 'isCreate'
isCreate : me . isCreate ,
2021-01-19 17:31:03 +01:00
items : items ,
2015-06-16 17:42:36 +02:00
} ) ;
Ext . apply ( me , {
subject : subject ,
2021-01-19 17:39:15 +01:00
items : [ ipanel ] ,
2015-06-16 17:42:36 +02:00
} ) ;
me . callParent ( ) ;
2021-01-19 17:31:03 +01:00
} ,
2015-06-16 17:42:36 +02:00
} ) ;
Ext . define ( 'PVE.SecurityGroupList' , {
extend : 'Ext.grid.Panel' ,
alias : 'widget.pveSecurityGroupList' ,
2016-11-08 10:50:44 +01:00
stateful : true ,
stateId : 'grid-securitygroups' ,
2021-05-18 13:09:20 +02:00
rulePanel : undefined ,
2015-06-16 17:42:36 +02:00
addBtn : undefined ,
removeBtn : undefined ,
editBtn : undefined ,
base _url : "/cluster/firewall/groups" ,
initComponent : function ( ) {
2021-05-18 13:09:20 +02:00
let me = this ;
if ( ! me . base _url ) {
2015-06-16 17:42:36 +02:00
throw "no base_url specified" ;
}
2021-05-18 13:09:20 +02:00
let store = new Ext . data . Store ( {
2018-01-15 15:18:06 +01:00
model : 'pve-security-groups' ,
2015-06-16 17:42:36 +02:00
proxy : {
2017-12-11 14:46:51 +01:00
type : 'proxmox' ,
2021-01-19 17:31:03 +01:00
url : '/api2/json' + me . base _url ,
2015-06-16 17:42:36 +02:00
} ,
sorters : {
property : 'group' ,
2021-12-07 14:08:44 +01:00
direction : 'ASC' ,
2021-01-19 17:31:03 +01:00
} ,
2015-06-16 17:42:36 +02:00
} ) ;
2021-05-18 13:09:20 +02:00
let sm = Ext . create ( 'Ext.selection.RowModel' , { } ) ;
2015-06-16 17:42:36 +02:00
2021-05-18 13:09:20 +02:00
let reload = function ( ) {
let oldrec = sm . getSelection ( ) [ 0 ] ;
store . load ( ( records , operation , success ) => {
2015-06-16 17:42:36 +02:00
if ( oldrec ) {
2021-05-18 13:09:20 +02:00
let rec = store . findRecord ( 'group' , oldrec . data . group , 0 , false , true , true ) ;
2015-06-16 17:42:36 +02:00
if ( rec ) {
sm . select ( rec ) ;
}
}
} ) ;
} ;
2021-05-18 13:09:20 +02:00
let run _editor = function ( ) {
let rec = sm . getSelection ( ) [ 0 ] ;
2015-06-16 17:42:36 +02:00
if ( ! rec ) {
return ;
}
2021-05-18 13:09:20 +02:00
Ext . create ( 'PVE.SecurityGroupEdit' , {
2015-06-16 17:42:36 +02:00
digest : rec . data . digest ,
group _name : rec . data . group ,
2021-01-19 17:31:03 +01:00
group _comment : rec . data . comment ,
2021-05-18 13:09:20 +02:00
listeners : {
destroy : ( ) => reload ( ) ,
} ,
autoShow : true ,
2015-06-16 17:42:36 +02:00
} ) ;
} ;
2018-01-15 15:18:08 +01:00
me . editBtn = new Proxmox . button . Button ( {
2015-06-16 17:42:36 +02:00
text : gettext ( 'Edit' ) ,
disabled : true ,
selModel : sm ,
2021-01-19 17:31:03 +01:00
handler : run _editor ,
2015-06-16 17:42:36 +02:00
} ) ;
2018-01-15 15:18:08 +01:00
me . addBtn = new Proxmox . button . Button ( {
2015-06-16 17:42:36 +02:00
text : gettext ( 'Create' ) ,
handler : function ( ) {
sm . deselectAll ( ) ;
var win = Ext . create ( 'PVE.SecurityGroupEdit' , { } ) ;
win . show ( ) ;
win . on ( 'destroy' , reload ) ;
2021-01-19 17:31:03 +01:00
} ,
2015-06-16 17:42:36 +02:00
} ) ;
2018-01-15 15:18:07 +01:00
me . removeBtn = Ext . create ( 'Proxmox.button.StdRemoveButton' , {
2015-06-16 17:42:36 +02:00
selModel : sm ,
2018-01-15 15:18:07 +01:00
baseurl : me . base _url + '/' ,
enableFn : function ( rec ) {
2021-01-19 17:42:36 +01:00
return rec && me . base _url ;
2018-01-15 15:18:07 +01:00
} ,
2021-05-18 13:09:20 +02:00
callback : ( ) => reload ( ) ,
2015-06-16 17:42:36 +02:00
} ) ;
Ext . apply ( me , {
store : store ,
2021-01-19 17:39:15 +01:00
tbar : [ '<b>' + gettext ( 'Group' ) + ':</b>' , me . addBtn , me . removeBtn , me . editBtn ] ,
2015-06-16 17:42:36 +02:00
selModel : sm ,
columns : [
2021-05-18 13:09:20 +02:00
{
header : gettext ( 'Group' ) ,
dataIndex : 'group' ,
width : '100' ,
} ,
{
header : gettext ( 'Comment' ) ,
dataIndex : 'comment' ,
renderer : Ext . String . htmlEncode ,
flex : 1 ,
} ,
2015-06-16 17:42:36 +02:00
] ,
listeners : {
itemdblclick : run _editor ,
2021-05-18 13:09:20 +02:00
select : function ( _sm , rec ) {
if ( ! me . rulePanel ) {
me . rulePanel = me . up ( 'panel' ) . down ( 'pveFirewallRules' ) ;
}
me . rulePanel . setBaseUrl ( ` /cluster/firewall/groups/ ${ rec . data . group } ` ) ;
2015-06-16 17:42:36 +02:00
} ,
deselect : function ( ) {
2021-05-18 13:09:20 +02:00
if ( ! me . rulePanel ) {
me . rulePanel = me . up ( 'panel' ) . down ( 'pveFirewallRules' ) ;
}
me . rulePanel . setBaseUrl ( undefined ) ;
2015-06-16 17:42:36 +02:00
} ,
2021-01-19 17:31:03 +01:00
show : reload ,
} ,
2015-06-16 17:42:36 +02:00
} ) ;
me . callParent ( ) ;
store . load ( ) ;
2021-01-19 17:31:03 +01:00
} ,
2015-06-16 17:42:36 +02:00
} ) ;
Ext . define ( 'PVE.SecurityGroups' , {
extend : 'Ext.panel.Panel' ,
alias : 'widget.pveSecurityGroups' ,
title : 'Security Groups' ,
2021-05-18 13:09:20 +02:00
layout : 'border' ,
2015-06-16 17:42:36 +02:00
2021-05-18 13:09:20 +02:00
items : [
{
xtype : 'pveFirewallRules' ,
2015-06-16 17:42:36 +02:00
region : 'center' ,
allow _groups : false ,
list _refs _url : '/cluster/firewall/refs' ,
tbar _prefix : '<b>' + gettext ( 'Rules' ) + ':</b>' ,
2021-01-19 17:31:03 +01:00
border : false ,
2021-05-18 13:09:20 +02:00
} ,
{
xtype : 'pveSecurityGroupList' ,
2015-06-16 17:42:36 +02:00
region : 'west' ,
2016-11-08 10:50:44 +01:00
width : '25%' ,
2015-06-16 17:42:36 +02:00
border : false ,
2021-01-19 17:31:03 +01:00
split : true ,
2021-05-18 13:09:20 +02:00
} ,
] ,
listeners : {
show : function ( ) {
let sglist = this . down ( 'pveSecurityGroupList' ) ;
sglist . fireEvent ( 'show' , sglist ) ;
} ,
2021-01-19 17:31:03 +01:00
} ,
2015-06-16 17:42:36 +02:00
} ) ;