]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/dc/SecurityGroups.js
rename manager5 to manager6
[pve-manager.git] / www / manager6 / dc / SecurityGroups.js
1 Ext.define('PVE.SecurityGroupEdit', {
2 extend: 'PVE.window.Edit',
3
4 base_url: "/cluster/firewall/groups",
5
6 allow_iface: false,
7
8 initComponent : function() {
9 /*jslint confusion: true */
10 var me = this;
11
12 me.create = (me.group_name === undefined);
13
14 var subject;
15
16 me.url = '/api2/extjs' + me.base_url;
17 me.method = 'POST';
18
19 var items = [
20 {
21 xtype: 'textfield',
22 name: 'group',
23 value: me.group_name || '',
24 fieldLabel: gettext('Name'),
25 allowBlank: false
26 },
27 {
28 xtype: 'textfield',
29 name: 'comment',
30 value: me.group_comment || '',
31 fieldLabel: gettext('Comment')
32 }
33 ];
34
35 if (me.create) {
36 subject = gettext('Security Group');
37 } else {
38 subject = gettext('Security Group') + " '" + me.group_name + "'";
39 items.push({
40 xtype: 'hiddenfield',
41 name: 'rename',
42 value: me.group_name
43 });
44 }
45
46 var ipanel = Ext.create('PVE.panel.InputPanel', {
47 create: me.create,
48 items: items
49 });
50
51
52 Ext.apply(me, {
53 subject: subject,
54 items: [ ipanel ]
55 });
56
57 me.callParent();
58 }
59 });
60
61 Ext.define('PVE.SecurityGroupList', {
62 extend: 'Ext.grid.Panel',
63 alias: 'widget.pveSecurityGroupList',
64
65 rule_panel: undefined,
66
67 addBtn: undefined,
68 removeBtn: undefined,
69 editBtn: undefined,
70
71 base_url: "/cluster/firewall/groups",
72
73 initComponent: function() {
74 /*jslint confusion: true */
75 var me = this;
76
77 if (me.rule_panel == undefined) {
78 throw "no rule panel specified";
79 }
80
81 if (me.base_url == undefined) {
82 throw "no base_url specified";
83 }
84
85 var store = new Ext.data.Store({
86 fields: [ 'group', 'comment', 'digest' ],
87 proxy: {
88 type: 'pve',
89 url: '/api2/json' + me.base_url
90 },
91 idProperty: 'group',
92 sorters: {
93 property: 'group',
94 order: 'DESC'
95 }
96 });
97
98 var sm = Ext.create('Ext.selection.RowModel', {});
99
100 var reload = function() {
101 var oldrec = sm.getSelection()[0];
102 store.load(function(records, operation, success) {
103 if (oldrec) {
104 var rec = store.findRecord('group', oldrec.data.group);
105 if (rec) {
106 sm.select(rec);
107 }
108 }
109 });
110 };
111
112 var run_editor = function() {
113 var rec = sm.getSelection()[0];
114 if (!rec) {
115 return;
116 }
117 var win = Ext.create('PVE.SecurityGroupEdit', {
118 digest: rec.data.digest,
119 group_name: rec.data.group,
120 group_comment: rec.data.comment
121 });
122 win.show();
123 win.on('destroy', reload);
124 };
125
126 me.editBtn = new PVE.button.Button({
127 text: gettext('Edit'),
128 disabled: true,
129 selModel: sm,
130 handler: run_editor
131 });
132
133 me.addBtn = new PVE.button.Button({
134 text: gettext('Create'),
135 handler: function() {
136 sm.deselectAll();
137 var win = Ext.create('PVE.SecurityGroupEdit', {});
138 win.show();
139 win.on('destroy', reload);
140 }
141 });
142
143 me.removeBtn = new PVE.button.Button({
144 text: gettext('Remove'),
145 selModel: sm,
146 disabled: true,
147 handler: function() {
148 var rec = sm.getSelection()[0];
149 if (!rec || !me.base_url) {
150 return;
151 }
152 PVE.Utils.API2Request({
153 url: me.base_url + '/' + rec.data.group,
154 method: 'DELETE',
155 waitMsgTarget: me,
156 failure: function(response, options) {
157 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
158 },
159 callback: reload
160 });
161 }
162 });
163
164 Ext.apply(me, {
165 store: store,
166 tbar: [ '<b>' + gettext('Group') + ':</b>', me.addBtn, me.removeBtn, me.editBtn ],
167 selModel: sm,
168 columns: [
169 { header: gettext('Group'), dataIndex: 'group', width: 100 },
170 { header: gettext('Comment'), dataIndex: 'comment', flex: 1 }
171 ],
172 listeners: {
173 itemdblclick: run_editor,
174 select: function(sm, rec) {
175 var url = '/cluster/firewall/groups/' + rec.data.group;
176 me.rule_panel.setBaseUrl(url);
177 },
178 deselect: function() {
179 me.rule_panel.setBaseUrl(undefined);
180 },
181 show: reload
182 }
183 });
184
185 me.callParent();
186
187 store.load();
188 }
189 });
190
191 Ext.define('PVE.SecurityGroups', {
192 extend: 'Ext.panel.Panel',
193 alias: 'widget.pveSecurityGroups',
194
195 title: 'Security Groups',
196
197 initComponent: function() {
198 var me = this;
199
200 var rule_panel = Ext.createWidget('pveFirewallRules', {
201 region: 'center',
202 allow_groups: false,
203 list_refs_url: '/cluster/firewall/refs',
204 tbar_prefix: '<b>' + gettext('Rules') + ':</b>',
205 flex: 0.75,
206 border: false
207 });
208
209 var sglist = Ext.createWidget('pveSecurityGroupList', {
210 region: 'west',
211 rule_panel: rule_panel,
212 flex: 0.25,
213 border: false,
214 split: true
215 });
216
217
218 Ext.apply(me, {
219 layout: 'border',
220 items: [ sglist, rule_panel ],
221 listeners: {
222 show: function() {
223 sglist.fireEvent('show', sglist);
224 }
225 }
226 });
227
228 me.callParent();
229 }
230 });