]> git.proxmox.com Git - pmg-gui.git/blob - js/LDAPConfig.js
remove border from Subscription
[pmg-gui.git] / js / LDAPConfig.js
1 Ext.define('pmg-ldap-config', {
2 extend: 'Ext.data.Model',
3 fields: [ 'profile', 'server1', 'server2', 'comment',
4 'mode', 'binddn', 'bindpw', 'basedn', 'groupbasedn',
5 'filter', 'accountattr', 'mailattr',
6 { name: 'port', type: 'integer' },
7 { name: 'gcount', type: 'integer' },
8 { name: 'mcount', type: 'integer' },
9 { name: 'ucount', type: 'integer' },
10 { name: 'disable', type: 'boolean' }
11 ],
12 proxy: {
13 type: 'proxmox',
14 url: "/api2/json/config/ldap"
15 },
16 idProperty: 'profile'
17 });
18
19 Ext.define('PMG.LDAPInputPanel', {
20 extend: 'Proxmox.panel.InputPanel',
21 alias: 'widget.pmgLDAPInputPanel',
22
23 profileId: undefined,
24
25 onGetValues: function(values) {
26 var me = this;
27
28 values.disable = values.enable ? 0 : 1;
29 delete values.enable;
30
31 return values;
32 },
33
34 initComponent : function() {
35 var me = this;
36
37 me.column1 = [
38 {
39 xtype: me.profileId ? 'displayfield' : 'textfield',
40 fieldLabel: gettext('Profile Name'),
41 value: me.profileId || '',
42 name: 'profile',
43 vtype: 'StorageId',
44 allowBlank: false
45 },
46 {
47 xtype: 'proxmoxKVComboBox',
48 name: 'mode',
49 comboItems: [
50 ['ldap', PMG.Utils.format_ldap_protocol('ldap')],
51 ['ldaps', PMG.Utils.format_ldap_protocol('ldaps')]
52 ],
53 value: 'ldap',
54 fieldLabel: gettext('Protocol')
55 },
56 {
57 xtype: 'textfield',
58 fieldLabel: gettext('Server'),
59 allowBlank: false,
60 vtype: 'IP64Address',
61 name: 'server1'
62 },
63 {
64 xtype: 'proxmoxtextfield',
65 fieldLabel: gettext('Server'),
66 allowBlank: true,
67 deleteEmpty: me.create ? false : true,
68 vtype: 'IP64Address',
69 name: 'server2'
70 },
71 {
72 xtype: 'proxmoxintegerfield',
73 name: 'port',
74 emptyText: gettext('Default'),
75 deleteEmpty: me.create ? false : true,
76 minValue: 1,
77 maxValue: 65535,
78 fieldLabel: gettext('Port'),
79 },
80 {
81 xtype: 'textfield',
82 name: 'binddn',
83 allowBlank: true,
84 fieldLabel: gettext('User name')
85 },
86 {
87 xtype: 'textfield',
88 inputType: 'password',
89 allowBlank: true,
90 name: 'bindpw',
91 fieldLabel: gettext('Password')
92 }
93 ];
94
95 me.column2 = [
96 {
97 xtype: 'proxmoxcheckbox',
98 name: 'enable',
99 checked: true,
100 uncheckedValue: 0,
101 fieldLabel: gettext('Enable')
102 },
103 {
104 xtype: 'proxmoxtextfield',
105 allowBlank: true,
106 deleteEmpty: me.create ? false : true,
107 name: 'basedn',
108 fieldLabel: gettext('Base DN')
109 },
110 {
111 xtype: 'proxmoxtextfield',
112 allowBlank: true,
113 deleteEmpty: me.create ? false : true,
114 name: 'groupbasedn',
115 fieldLabel: gettext('Base DN for Groups')
116 },
117 {
118 xtype: 'proxmoxtextfield',
119 allowBlank: true,
120 deleteEmpty: me.create ? false : true,
121 name: 'mailattr',
122 fieldLabel: gettext('EMail attribute name(s)')
123 },
124 {
125 xtype: 'proxmoxtextfield',
126 allowBlank: true,
127 deleteEmpty: me.create ? false : true,
128 name: 'accountattr',
129 fieldLabel: gettext('Account attribute name')
130 },
131 {
132 xtype: 'proxmoxtextfield',
133 allowBlank: true,
134 deleteEmpty: me.create ? false : true,
135 name: 'filter',
136 fieldLabel: gettext('LDAP filter')
137 },
138 {
139 xtype: 'proxmoxtextfield',
140 allowBlank: true,
141 deleteEmpty: me.create ? false : true,
142 name: 'groupclass',
143 fieldLabel: gettext('Group objectclass')
144 }
145 ];
146
147 me.columnB = [
148 {
149 xtype: 'textfield',
150 fieldLabel: gettext('Comment'),
151 allowBlank: true,
152 name: 'comment'
153 }
154 ];
155
156 me.callParent();
157 }
158 });
159
160 Ext.define('PMG.LDAPEdit', {
161 extend: 'Proxmox.window.Edit',
162 alias: 'widget.pmgLDAPEdit',
163
164 subject: 'LDAP Profile',
165 isAdd: true,
166
167 initComponent : function() {
168 var me = this;
169
170 me.create = me.profileId ? false : true;
171
172 if (me.create) {
173 me.url = '/api2/extjs/config/ldap';
174 me.method = 'POST';
175 } else {
176 me.url = '/api2/extjs/config/ldap/' + me.profileId + '/config';
177 me.method = 'PUT';
178 }
179
180 var ipanel = Ext.create('PMG.LDAPInputPanel', {
181 create: me.create,
182 profileId: me.profileId
183 });
184
185 me.items = [ ipanel ];
186
187 me.fieldDefaults = {
188 labelWidth: 150
189 };
190
191 me.callParent();
192
193 if (!me.create) {
194 me.load({
195 success: function(response, options) {
196 var values = response.result.data;
197
198 values.enable = values.disable ? 0 : 1;
199 ipanel.setValues(values);
200 }
201 });
202 }
203 }
204 });
205
206 Ext.define('PMG.LDAPConfig', {
207 extend: 'Ext.grid.GridPanel',
208 alias: ['widget.pmgLDAPConfig'],
209
210 initComponent : function() {
211 var me = this;
212
213 me.store = new Ext.data.Store({
214 model: 'pmg-ldap-config',
215 sorters: {
216 property: 'profile',
217 order: 'DESC'
218 }
219 });
220
221 var reload = function() {
222 me.store.load();
223 };
224
225 me.selModel = Ext.create('Ext.selection.RowModel', {});
226
227 var remove_btn = Ext.createWidget('proxmoxStdRemoveButton', {
228 selModel: me.selModel,
229 baseurl: '/config/ldap',
230 callback: reload,
231 waitMsgTarget: me
232 });
233
234 var sync_btn = Ext.createWidget('proxmoxButton', {
235 text: gettext('Synchronize'),
236 selModel: me.selModel,
237 enableFn: function(rec) {
238 return !rec.data.disable;
239 },
240 disabled: true,
241 handler: function(btn, event, rec) {
242 Proxmox.Utils.API2Request({
243 url: '/config/ldap/' + rec.data.profile + '/sync',
244 method: 'POST',
245 waitMsgTarget: me,
246 callback: reload,
247 failure: function (response, opts) {
248 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
249 }
250 });
251 }
252 });
253
254 var run_editor = function() {
255 var rec = me.selModel.getSelection()[0];
256 if (!rec) {
257 return;
258 }
259
260 var win = Ext.createWidget('pmgLDAPEdit', {
261 profileId: rec.data.profile
262 });
263 win.load();
264 win.on('destroy', reload);
265 win.show();
266 };
267
268 me.tbar = [
269 {
270 xtype: 'proxmoxButton',
271 text: gettext('Edit'),
272 disabled: true,
273 selModel: me.selModel,
274 handler: run_editor
275 },
276 {
277 text: gettext('Create'),
278 handler: function() {
279 var win = Ext.createWidget('pmgLDAPEdit', {});
280 win.on('destroy', reload);
281 win.show();
282 }
283 },
284 remove_btn, sync_btn
285 ];
286
287 Proxmox.Utils.monStoreErrors(me, me.store);
288
289 Ext.apply(me, {
290
291 columns: [
292 {
293 header: gettext('Profile Name'),
294 sortable: true,
295 width: 120,
296 dataIndex: 'profile'
297 },
298 {
299 header: gettext('Protocol'),
300 sortable: true,
301 dataIndex: 'mode',
302 renderer: PMG.Utils.format_ldap_protocol
303 },
304 {
305 header: gettext('Server'),
306 sortable: true,
307 dataIndex: 'server1',
308 renderer: function(value, metaData, rec) {
309 if (rec.data.server2) {
310 return value + '<br>' + rec.data.server2;
311 }
312 return value;
313 }
314 },
315 {
316 header: gettext('Enabled'),
317 width: 80,
318 sortable: true,
319 dataIndex: 'disable',
320 renderer: Proxmox.Utils.format_neg_boolean
321 },
322 {
323 header: gettext('Comment'),
324 sortable: false,
325 renderer: Ext.String.htmlEncode,
326 dataIndex: 'comment',
327 flex: 1
328 },
329 {
330 header: gettext('Accounts'),
331 width: 80,
332 sortable: true,
333 dataIndex: 'ucount'
334 },
335 {
336 header: gettext('Addresses'),
337 width: 80,
338 sortable: true,
339 dataIndex: 'mcount'
340 },
341 {
342 header: gettext('Groups'),
343 width: 80,
344 sortable: true,
345 dataIndex: 'gcount'
346 },
347 ],
348 listeners: {
349 itemdblclick: run_editor,
350 activate: reload
351 }
352 });
353
354 me.callParent();
355 }
356 });