2018-01-15 15:18:06 +01:00
Ext . define ( 'pve-security-groups' , {
extend : 'Ext.data.Model' ,
fields : [ 'group' , 'comment' , 'digest' ] ,
idProperty : 'group'
} ) ;
2015-06-16 17:42:36 +02:00
Ext . define ( 'PVE.SecurityGroupEdit' , {
extend : 'PVE.window.Edit' ,
base _url : "/cluster/firewall/groups" ,
allow _iface : false ,
initComponent : function ( ) {
var me = this ;
2017-02-28 14:26:49 +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' ;
var items = [
{
xtype : 'textfield' ,
name : 'group' ,
value : me . group _name || '' ,
fieldLabel : gettext ( 'Name' ) ,
allowBlank : false
} ,
{
xtype : 'textfield' ,
name : 'comment' ,
value : me . group _comment || '' ,
fieldLabel : gettext ( 'Comment' )
}
] ;
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' ,
value : me . group _name
} ) ;
}
var ipanel = Ext . create ( 'PVE.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 ,
2015-06-16 17:42:36 +02:00
items : items
} ) ;
Ext . apply ( me , {
subject : subject ,
items : [ ipanel ]
} ) ;
me . callParent ( ) ;
}
} ) ;
Ext . define ( 'PVE.SecurityGroupList' , {
extend : 'Ext.grid.Panel' ,
alias : 'widget.pveSecurityGroupList' ,
2016-11-08 10:50:44 +01:00
stateful : true ,
stateId : 'grid-securitygroups' ,
2015-06-16 17:42:36 +02:00
rule _panel : undefined ,
addBtn : undefined ,
removeBtn : undefined ,
editBtn : undefined ,
base _url : "/cluster/firewall/groups" ,
initComponent : function ( ) {
/*jslint confusion: true */
var me = this ;
if ( me . rule _panel == undefined ) {
throw "no rule panel specified" ;
}
if ( me . base _url == undefined ) {
throw "no base_url specified" ;
}
var 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 : {
type : 'pve' ,
url : '/api2/json' + me . base _url
} ,
sorters : {
property : 'group' ,
order : 'DESC'
}
} ) ;
var sm = Ext . create ( 'Ext.selection.RowModel' , { } ) ;
var reload = function ( ) {
var oldrec = sm . getSelection ( ) [ 0 ] ;
store . load ( function ( records , operation , success ) {
if ( oldrec ) {
var rec = store . findRecord ( 'group' , oldrec . data . group ) ;
if ( rec ) {
sm . select ( rec ) ;
}
}
} ) ;
} ;
var run _editor = function ( ) {
var rec = sm . getSelection ( ) [ 0 ] ;
if ( ! rec ) {
return ;
}
var win = Ext . create ( 'PVE.SecurityGroupEdit' , {
digest : rec . data . digest ,
group _name : rec . data . group ,
group _comment : rec . data . comment
} ) ;
win . show ( ) ;
win . on ( 'destroy' , reload ) ;
} ;
me . editBtn = new PVE . button . Button ( {
text : gettext ( 'Edit' ) ,
disabled : true ,
selModel : sm ,
handler : run _editor
} ) ;
me . addBtn = new PVE . button . Button ( {
text : gettext ( 'Create' ) ,
handler : function ( ) {
sm . deselectAll ( ) ;
var win = Ext . create ( 'PVE.SecurityGroupEdit' , { } ) ;
win . show ( ) ;
win . on ( 'destroy' , reload ) ;
}
} ) ;
me . removeBtn = new PVE . button . Button ( {
text : gettext ( 'Remove' ) ,
selModel : sm ,
disabled : true ,
handler : function ( ) {
var rec = sm . getSelection ( ) [ 0 ] ;
if ( ! rec || ! me . base _url ) {
return ;
}
PVE . Utils . API2Request ( {
url : me . base _url + '/' + rec . data . group ,
method : 'DELETE' ,
waitMsgTarget : me ,
failure : function ( response , options ) {
Ext . Msg . alert ( gettext ( 'Error' ) , response . htmlStatus ) ;
} ,
callback : reload
} ) ;
}
} ) ;
Ext . apply ( me , {
store : store ,
tbar : [ '<b>' + gettext ( 'Group' ) + ':</b>' , me . addBtn , me . removeBtn , me . editBtn ] ,
selModel : sm ,
columns : [
2016-11-08 10:50:44 +01:00
{ header : gettext ( 'Group' ) , dataIndex : 'group' , width : '100' } ,
2016-02-18 15:21:40 +01:00
{ header : gettext ( 'Comment' ) , dataIndex : 'comment' , renderer : Ext . String . htmlEncode , flex : 1 }
2015-06-16 17:42:36 +02:00
] ,
listeners : {
itemdblclick : run _editor ,
select : function ( sm , rec ) {
var url = '/cluster/firewall/groups/' + rec . data . group ;
me . rule _panel . setBaseUrl ( url ) ;
} ,
deselect : function ( ) {
me . rule _panel . setBaseUrl ( undefined ) ;
} ,
show : reload
}
} ) ;
me . callParent ( ) ;
store . load ( ) ;
}
} ) ;
Ext . define ( 'PVE.SecurityGroups' , {
extend : 'Ext.panel.Panel' ,
alias : 'widget.pveSecurityGroups' ,
title : 'Security Groups' ,
initComponent : function ( ) {
var me = this ;
var rule _panel = Ext . createWidget ( 'pveFirewallRules' , {
region : 'center' ,
allow _groups : false ,
list _refs _url : '/cluster/firewall/refs' ,
tbar _prefix : '<b>' + gettext ( 'Rules' ) + ':</b>' ,
border : false
} ) ;
var sglist = Ext . createWidget ( 'pveSecurityGroupList' , {
region : 'west' ,
rule _panel : rule _panel ,
2016-11-08 10:50:44 +01:00
width : '25%' ,
2015-06-16 17:42:36 +02:00
border : false ,
split : true
} ) ;
Ext . apply ( me , {
layout : 'border' ,
items : [ sglist , rule _panel ] ,
listeners : {
show : function ( ) {
sglist . fireEvent ( 'show' , sglist ) ;
}
}
} ) ;
me . callParent ( ) ;
}
} ) ;