]>
git.proxmox.com Git - pmg-gui.git/blob - js/LDAPConfig.js
2 /*jslint confusion: true*/
3 /* reload is function and string,
4 * height is number and string,
5 * hidden is bool and string,
6 * bind is function and object,
7 * callback is function and string
9 Ext
.define('pmg-ldap-config', {
10 extend
: 'Ext.data.Model',
11 fields
: ['profile', 'server1', 'server2', 'comment',
12 'mode', 'binddn', 'bindpw', 'basedn', 'groupbasedn',
13 'filter', 'accountattr', 'mailattr',
14 { name
: 'port', type
: 'integer' },
15 { name
: 'gcount', type
: 'integer' },
16 { name
: 'mcount', type
: 'integer' },
17 { name
: 'ucount', type
: 'integer' },
18 { name
: 'disable', type
: 'boolean' },
22 url
: "/api2/json/config/ldap",
24 idProperty
: 'profile',
27 Ext
.define('PMG.LDAPInputPanel', {
28 extend
: 'Proxmox.panel.InputPanel',
29 alias
: 'widget.pmgLDAPInputPanel',
33 onGetValues: function(values
) {
36 values
.disable
= values
.enable
? 0 : 1;
42 initComponent: function() {
47 xtype
: me
.profileId
? 'displayfield' : 'textfield',
48 fieldLabel
: gettext('Profile Name'),
49 value
: me
.profileId
|| '',
55 xtype
: 'proxmoxKVComboBox',
58 ['ldap', PMG
.Utils
.format_ldap_protocol('ldap')],
59 ['ldaps', PMG
.Utils
.format_ldap_protocol('ldaps')],
60 ['ldap+starttls', PMG
.Utils
.format_ldap_protocol('ldap+starttls')],
63 fieldLabel
: gettext('Protocol'),
65 change: function(cb
, value
) {
66 var isldap
= value
=== 'ldap';
67 me
.down('field[name=verify]').setVisible(!isldap
);
72 xtype
: 'proxmoxcheckbox',
74 fieldLabel
: gettext('Verify Certificate'),
82 fieldLabel
: gettext('Server'),
88 xtype
: 'proxmoxtextfield',
89 fieldLabel
: gettext('Server'),
91 deleteEmpty
: !me
.isCreate
,
96 xtype
: 'proxmoxintegerfield',
98 emptyText
: gettext('Default'),
99 deleteEmpty
: !me
.isCreate
,
102 fieldLabel
: gettext('Port'),
108 fieldLabel
: gettext('User name'),
112 inputType
: 'password',
115 fieldLabel
: gettext('Password'),
121 xtype
: 'proxmoxcheckbox',
125 fieldLabel
: gettext('Enable'),
128 xtype
: 'proxmoxtextfield',
130 deleteEmpty
: !me
.isCreate
,
132 fieldLabel
: gettext('Base DN'),
135 xtype
: 'proxmoxtextfield',
137 deleteEmpty
: !me
.isCreate
,
139 fieldLabel
: gettext('Base DN for Groups'),
142 xtype
: 'proxmoxtextfield',
144 deleteEmpty
: !me
.isCreate
,
146 fieldLabel
: gettext('EMail attribute name(s)'),
149 xtype
: 'proxmoxtextfield',
151 deleteEmpty
: !me
.isCreate
,
153 fieldLabel
: gettext('Account attribute name'),
156 xtype
: 'proxmoxtextfield',
158 deleteEmpty
: !me
.isCreate
,
160 fieldLabel
: gettext('LDAP filter'),
163 xtype
: 'proxmoxtextfield',
165 deleteEmpty
: !me
.isCreate
,
167 fieldLabel
: gettext('Group objectclass'),
174 fieldLabel
: gettext('Comment'),
184 Ext
.define('PMG.LDAPEdit', {
185 extend
: 'Proxmox.window.Edit',
186 alias
: 'widget.pmgLDAPEdit',
187 onlineHelp
: 'pmgconfig_ldap',
189 subject
: 'LDAP Profile',
192 initComponent: function() {
195 me
.isCreate
= !me
.profileId
;
198 me
.url
= '/api2/extjs/config/ldap';
201 me
.url
= '/api2/extjs/config/ldap/' + me
.profileId
+ '/config';
205 var ipanel
= Ext
.create('PMG.LDAPInputPanel', {
206 isCreate
: me
.isCreate
,
207 profileId
: me
.profileId
,
220 success: function(response
, options
) {
221 var values
= response
.result
.data
;
223 values
.enable
= values
.disable
? 0 : 1;
224 values
.verify
= !!values
.verify
;
225 ipanel
.setValues(values
);
232 Ext
.define('PMG.LDAPUserGrid', {
233 extend
: 'Ext.grid.Panel',
234 xtype
: 'pmgLDAPUserGrid',
236 emptyText
: gettext('No data in database'),
239 fields
: ['dn', 'account', 'pmail'],
240 proxy
: { type
: 'proxmox' },
250 text
: gettext('Account'),
251 dataIndex
: 'account',
255 text
: gettext('Primary E-Mail'),
261 initComponent: function() {
265 me
.getStore().getProxy().setUrl(me
.url
);
266 me
.getStore().load();
271 Ext
.define('PMG.LDAPConfig', {
272 extend
: 'Ext.panel.Panel',
273 xtype
: 'pmgLDAPConfig',
276 xclass
: 'Ext.app.ViewController',
278 openUserList: function(grid
, record
) {
279 var name
= this.getViewModel().get('name');
280 Ext
.create('Ext.window.Window', {
281 title
: Ext
.String
.format(gettext("Users of '{0}'"), record
.data
.dn
),
287 xtype
: 'pmgLDAPUserGrid',
289 url
: '/api2/json/config/ldap/' + name
+ '/groups/' + encodeURIComponent(record
.data
.gid
),
294 showUsers: function(button
) {
296 var view
= me
.lookup('groupgrid');
297 var record
= view
.getSelection()[0];
298 me
.openUserList(view
, record
);
301 openUserMails: function(grid
, record
) {
302 var name
= this.getViewModel().get('name');
303 Ext
.create('Ext.window.Window', {
304 title
: Ext
.String
.format(gettext("E-Mail addresses of '{0}'"), record
.data
.dn
),
314 field
: ['email', 'primary'],
317 url
: '/api2/json/config/ldap/' + name
+ '/users/' + encodeURIComponent(record
.data
.pmail
),
321 { dataIndex
: 'email', text
: gettext('E-Mail address'), flex
: 1 },
327 showEmails: function(button
) {
329 var view
= me
.lookup('usergrid');
330 var record
= view
.getSelection()[0];
331 me
.openUserMails(view
, record
);
334 reload: function(grid
) {
336 var selection
= grid
.getSelection();
337 me
.showInfo(grid
, selection
);
340 showInfo: function(grid
, selected
) {
342 var viewModel
= me
.getViewModel();
344 var name
= selected
[0].data
.profile
;
345 viewModel
.set('selected', true);
346 viewModel
.set('name', name
);
348 // set grid stores and load them
349 var gstore
= me
.lookup('groupgrid').getStore();
350 var ustore
= me
.lookup('usergrid').getStore();
351 gstore
.getProxy().setUrl('/api2/json/config/ldap/' + name
+ '/groups');
352 ustore
.getProxy().setUrl('/api2/json/config/ldap/' + name
+ '/users');
356 viewModel
.set('selected', false);
360 init: function(view
) {
362 me
.lookup('grid').relayEvents(view
, ['activate']);
363 var groupgrid
= me
.lookup('groupgrid');
364 var usergrid
= me
.lookup('usergrid');
366 Proxmox
.Utils
.monStoreErrors(groupgrid
, groupgrid
.getStore(), true);
367 Proxmox
.Utils
.monStoreErrors(usergrid
, usergrid
.getStore(), true);
371 'grid[reference=grid]': {
372 selectionchange
: 'showInfo',
375 'grid[reference=groupgrid]': {
376 itemdblclick
: 'openUserList',
378 'grid[reference=usergrid]': {
379 itemdblclick
: 'openUserMails',
397 xtype
: 'pmgLDAPConfigGrid',
409 hidden
: '{!selected}',
414 reference
: 'groupgrid',
416 emptyText
: gettext('No data in database'),
418 xtype
: 'proxmoxButton',
419 text
: gettext('Show Users'),
420 handler
: 'showUsers',
424 fields
: ['dn', 'gid'],
425 proxy
: { type
: 'proxmox' },
429 title
: Ext
.String
.format(gettext("Groups of '{0}'"), '{name}'),
440 xtype
: 'pmgLDAPUserGrid',
441 reference
: 'usergrid',
444 xtype
: 'proxmoxButton',
445 text
: gettext('Show E-Mail addresses'),
446 handler
: 'showEmails',
450 title
: Ext
.String
.format(gettext("Users of '{0}'"), '{name}'),
459 Ext
.define('PMG.LDAPConfigGrid', {
460 extend
: 'Ext.grid.GridPanel',
461 alias
: 'widget.pmgLDAPConfigGrid',
464 xclass
: 'Ext.app.ViewController',
466 run_editor: function() {
468 var view
= me
.getView();
469 var rec
= view
.getSelection()[0];
474 var win
= Ext
.createWidget('pmgLDAPEdit', {
475 profileId
: rec
.data
.profile
,
477 win
.on('destroy', me
.reload
, me
);
482 newProfile: function() {
484 var win
= Ext
.createWidget('pmgLDAPEdit', {});
485 win
.on('destroy', me
.reload
, me
);
491 var me
= this.getView();
492 me
.getStore().load();
493 me
.fireEvent('load', me
);
498 var view
= me
.getView();
499 var rec
= view
.getSelection()[0];
500 Proxmox
.Utils
.API2Request({
501 url
: '/config/ldap/' + rec
.data
.profile
+ '/sync',
504 callback: function() {
507 failure: function(response
, opts
) {
508 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
513 init: function(view
) {
515 Proxmox
.Utils
.monStoreErrors(view
, view
.getStore(), true);
520 model
: 'pmg-ldap-config',
529 xtype
: 'proxmoxButton',
530 text
: gettext('Edit'),
532 handler
: 'run_editor',
535 text
: gettext('Create'),
536 handler
: 'newProfile',
539 xtype
: 'proxmoxStdRemoveButton',
540 baseurl
: '/config/ldap',
544 xtype
: 'proxmoxButton',
545 text
: gettext('Synchronize'),
546 enableFn: function(rec
) {
547 return !rec
.data
.disable
;
555 itemdblclick
: 'run_editor',
561 header
: gettext('Profile Name'),
564 dataIndex
: 'profile',
567 header
: gettext('Protocol'),
570 renderer
: PMG
.Utils
.format_ldap_protocol
,
573 header
: gettext('Server'),
575 dataIndex
: 'server1',
576 renderer: function(value
, metaData
, rec
) {
577 if (rec
.data
.server2
) {
578 return value
+ '<br>' + rec
.data
.server2
;
584 header
: gettext('Enabled'),
587 dataIndex
: 'disable',
588 renderer
: Proxmox
.Utils
.format_neg_boolean
,
591 header
: gettext('Comment'),
593 renderer
: Ext
.String
.htmlEncode
,
594 dataIndex
: 'comment',
598 header
: gettext('Accounts'),
604 header
: gettext('Addresses'),
610 header
: gettext('Groups'),