]>
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"
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')]
62 fieldLabel
: gettext('Protocol'),
64 change: function(cb
, value
) {
65 var isldap
= (value
=== 'ldap');
66 me
.down('field[name=verify]').setVisible(!isldap
);
71 xtype
: 'proxmoxcheckbox',
73 fieldLabel
: gettext('Verify Certificate'),
81 fieldLabel
: gettext('Server'),
87 xtype
: 'proxmoxtextfield',
88 fieldLabel
: gettext('Server'),
90 deleteEmpty
: me
.isCreate
? false : true,
95 xtype
: 'proxmoxintegerfield',
97 emptyText
: gettext('Default'),
98 deleteEmpty
: me
.isCreate
? false : true,
101 fieldLabel
: gettext('Port')
107 fieldLabel
: gettext('User name')
111 inputType
: 'password',
114 fieldLabel
: gettext('Password')
120 xtype
: 'proxmoxcheckbox',
124 fieldLabel
: gettext('Enable')
127 xtype
: 'proxmoxtextfield',
129 deleteEmpty
: me
.isCreate
? false : true,
131 fieldLabel
: gettext('Base DN')
134 xtype
: 'proxmoxtextfield',
136 deleteEmpty
: me
.isCreate
? false : true,
138 fieldLabel
: gettext('Base DN for Groups')
141 xtype
: 'proxmoxtextfield',
143 deleteEmpty
: me
.isCreate
? false : true,
145 fieldLabel
: gettext('EMail attribute name(s)')
148 xtype
: 'proxmoxtextfield',
150 deleteEmpty
: me
.isCreate
? false : true,
152 fieldLabel
: gettext('Account attribute name')
155 xtype
: 'proxmoxtextfield',
157 deleteEmpty
: me
.isCreate
? false : true,
159 fieldLabel
: gettext('LDAP filter')
162 xtype
: 'proxmoxtextfield',
164 deleteEmpty
: me
.isCreate
? false : true,
166 fieldLabel
: gettext('Group objectclass')
173 fieldLabel
: gettext('Comment'),
183 Ext
.define('PMG.LDAPEdit', {
184 extend
: 'Proxmox.window.Edit',
185 alias
: 'widget.pmgLDAPEdit',
186 onlineHelp
: 'pmgconfig_ldap',
188 subject
: 'LDAP Profile',
191 initComponent : function() {
194 me
.isCreate
= me
.profileId
? false : true;
197 me
.url
= '/api2/extjs/config/ldap';
200 me
.url
= '/api2/extjs/config/ldap/' + me
.profileId
+ '/config';
204 var ipanel
= Ext
.create('PMG.LDAPInputPanel', {
205 isCreate
: me
.isCreate
,
206 profileId
: me
.profileId
209 me
.items
= [ ipanel
];
219 success: function(response
, options
) {
220 var values
= response
.result
.data
;
222 values
.enable
= values
.disable
? 0 : 1;
223 values
.verify
= !!values
.verify
;
224 ipanel
.setValues(values
);
231 Ext
.define('PMG.LDAPUserGrid', {
232 extend
: 'Ext.grid.Panel',
233 xtype
: 'pmgLDAPUserGrid',
235 emptyText
: gettext('No data in database'),
238 fields
: [ 'dn', 'account', 'pmail' ],
239 proxy
: { type
: 'proxmox' },
249 text
: gettext('Account'),
250 dataIndex
: 'account',
254 text
: gettext('Primary E-Mail'),
260 initComponent: function() {
264 me
.getStore().getProxy().setUrl(me
.url
);
265 me
.getStore().load();
270 Ext
.define('PMG.LDAPConfig', {
271 extend
: 'Ext.panel.Panel',
272 xtype
: 'pmgLDAPConfig',
275 xclass
: 'Ext.app.ViewController',
277 openUserList: function(grid
, record
) {
278 var name
= this.getViewModel().get('name');
279 Ext
.create('Ext.window.Window', {
280 title
: Ext
.String
.format(gettext("Users of '{0}'"), record
.data
.dn
),
286 xtype
: 'pmgLDAPUserGrid',
288 url
: '/api2/json/config/ldap/' + name
+ '/groups/' + encodeURIComponent(record
.data
.gid
)
293 showUsers: function(button
) {
295 var view
= me
.lookup('groupgrid');
296 var record
= view
.getSelection()[0];
297 me
.openUserList(view
, record
);
300 openUserMails: function(grid
, record
) {
301 var name
= this.getViewModel().get('name');
302 Ext
.create('Ext.window.Window', {
303 title
: Ext
.String
.format(gettext("E-Mail addresses of '{0}'"), record
.data
.dn
),
313 field
: ['email', 'primary'],
316 url
: '/api2/json/config/ldap/' + name
+ '/users/' + encodeURIComponent(record
.data
.pmail
)
320 { dataIndex
: 'email', text
: gettext('E-Mail address'), flex
: 1 }
326 showEmails: function(button
) {
328 var view
= me
.lookup('usergrid');
329 var record
= view
.getSelection()[0];
330 me
.openUserMails(view
, record
);
333 reload: function(grid
) {
335 var selection
= grid
.getSelection();
336 me
.showInfo(grid
, selection
);
339 showInfo: function(grid
, selected
) {
341 var viewModel
= me
.getViewModel();
343 var name
= selected
[0].data
.profile
;
344 viewModel
.set('selected', true);
345 viewModel
.set('name', name
);
347 // set grid stores and load them
348 var gstore
= me
.lookup('groupgrid').getStore();
349 var ustore
= me
.lookup('usergrid').getStore();
350 gstore
.getProxy().setUrl('/api2/json/config/ldap/' + name
+ '/groups');
351 ustore
.getProxy().setUrl('/api2/json/config/ldap/' + name
+ '/users');
355 viewModel
.set('selected', false);
359 init: function(view
) {
361 me
.lookup('grid').relayEvents(view
, ['activate']);
362 var groupgrid
= me
.lookup('groupgrid');
363 var usergrid
= me
.lookup('usergrid');
365 Proxmox
.Utils
.monStoreErrors(groupgrid
, groupgrid
.getStore(), true);
366 Proxmox
.Utils
.monStoreErrors(usergrid
, usergrid
.getStore(), true);
370 'grid[reference=grid]': {
371 selectionchange
: 'showInfo',
374 'grid[reference=groupgrid]': {
375 itemdblclick
: 'openUserList'
377 'grid[reference=usergrid]': {
378 itemdblclick
: 'openUserMails'
396 xtype
: 'pmgLDAPConfigGrid',
408 hidden
: '{!selected}'
413 reference
: 'groupgrid',
415 emptyText
: gettext('No data in database'),
417 xtype
: 'proxmoxButton',
418 text
: gettext('Show Users'),
419 handler
: 'showUsers',
423 fields
: ['dn', 'gid'],
424 proxy
: { type
: 'proxmox' },
428 title
: Ext
.String
.format(gettext("Groups of '{0}'"), '{name}')
439 xtype
: 'pmgLDAPUserGrid',
440 reference
: 'usergrid',
443 xtype
: 'proxmoxButton',
444 text
: gettext('Show E-Mail addresses'),
445 handler
: 'showEmails',
449 title
: Ext
.String
.format(gettext("Users of '{0}'"), '{name}')
458 Ext
.define('PMG.LDAPConfigGrid', {
459 extend
: 'Ext.grid.GridPanel',
460 alias
: 'widget.pmgLDAPConfigGrid',
463 xclass
: 'Ext.app.ViewController',
465 run_editor: function() {
467 var view
= me
.getView();
468 var rec
= view
.getSelection()[0];
473 var win
= Ext
.createWidget('pmgLDAPEdit', {
474 profileId
: rec
.data
.profile
476 win
.on('destroy', me
.reload
, me
);
481 newProfile: function() {
483 var win
= Ext
.createWidget('pmgLDAPEdit', {});
484 win
.on('destroy', me
.reload
, me
);
490 var me
= this.getView();
491 me
.getStore().load();
492 me
.fireEvent('load', me
);
497 var view
= me
.getView();
498 var rec
= view
.getSelection()[0];
499 Proxmox
.Utils
.API2Request({
500 url
: '/config/ldap/' + rec
.data
.profile
+ '/sync',
503 callback: function() {
506 failure: function (response
, opts
) {
507 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
512 init: function(view
) {
514 Proxmox
.Utils
.monStoreErrors(view
, view
.getStore(), true);
519 model
: 'pmg-ldap-config',
528 xtype
: 'proxmoxButton',
529 text
: gettext('Edit'),
531 handler
: 'run_editor'
534 text
: gettext('Create'),
535 handler
: 'newProfile'
538 xtype
: 'proxmoxStdRemoveButton',
539 baseurl
: '/config/ldap',
543 xtype
: 'proxmoxButton',
544 text
: gettext('Synchronize'),
545 enableFn: function(rec
) {
546 return !rec
.data
.disable
;
554 itemdblclick
: 'run_editor',
560 header
: gettext('Profile Name'),
566 header
: gettext('Protocol'),
569 renderer
: PMG
.Utils
.format_ldap_protocol
572 header
: gettext('Server'),
574 dataIndex
: 'server1',
575 renderer: function(value
, metaData
, rec
) {
576 if (rec
.data
.server2
) {
577 return value
+ '<br>' + rec
.data
.server2
;
583 header
: gettext('Enabled'),
586 dataIndex
: 'disable',
587 renderer
: Proxmox
.Utils
.format_neg_boolean
590 header
: gettext('Comment'),
592 renderer
: Ext
.String
.htmlEncode
,
593 dataIndex
: 'comment',
597 header
: gettext('Accounts'),
603 header
: gettext('Addresses'),
609 header
: gettext('Groups'),