]>
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')
66 fieldLabel
: gettext('Server'),
72 xtype
: 'proxmoxtextfield',
73 fieldLabel
: gettext('Server'),
75 deleteEmpty
: me
.isCreate
? false : true,
80 xtype
: 'proxmoxintegerfield',
82 emptyText
: gettext('Default'),
83 deleteEmpty
: me
.isCreate
? false : true,
86 fieldLabel
: gettext('Port')
92 fieldLabel
: gettext('User name')
96 inputType
: 'password',
99 fieldLabel
: gettext('Password')
105 xtype
: 'proxmoxcheckbox',
109 fieldLabel
: gettext('Enable')
112 xtype
: 'proxmoxtextfield',
114 deleteEmpty
: me
.isCreate
? false : true,
116 fieldLabel
: gettext('Base DN')
119 xtype
: 'proxmoxtextfield',
121 deleteEmpty
: me
.isCreate
? false : true,
123 fieldLabel
: gettext('Base DN for Groups')
126 xtype
: 'proxmoxtextfield',
128 deleteEmpty
: me
.isCreate
? false : true,
130 fieldLabel
: gettext('EMail attribute name(s)')
133 xtype
: 'proxmoxtextfield',
135 deleteEmpty
: me
.isCreate
? false : true,
137 fieldLabel
: gettext('Account attribute name')
140 xtype
: 'proxmoxtextfield',
142 deleteEmpty
: me
.isCreate
? false : true,
144 fieldLabel
: gettext('LDAP filter')
147 xtype
: 'proxmoxtextfield',
149 deleteEmpty
: me
.isCreate
? false : true,
151 fieldLabel
: gettext('Group objectclass')
158 fieldLabel
: gettext('Comment'),
168 Ext
.define('PMG.LDAPEdit', {
169 extend
: 'Proxmox.window.Edit',
170 alias
: 'widget.pmgLDAPEdit',
172 subject
: 'LDAP Profile',
175 initComponent : function() {
178 me
.isCreate
= me
.profileId
? false : true;
181 me
.url
= '/api2/extjs/config/ldap';
184 me
.url
= '/api2/extjs/config/ldap/' + me
.profileId
+ '/config';
188 var ipanel
= Ext
.create('PMG.LDAPInputPanel', {
189 isCreate
: me
.isCreate
,
190 profileId
: me
.profileId
193 me
.items
= [ ipanel
];
203 success: function(response
, options
) {
204 var values
= response
.result
.data
;
206 values
.enable
= values
.disable
? 0 : 1;
207 ipanel
.setValues(values
);
214 Ext
.define('PMG.LDAPUserGrid', {
215 extend
: 'Ext.grid.Panel',
216 xtype
: 'pmgLDAPUserGrid',
218 emptyText
: gettext('No data in database'),
221 fields
: [ 'dn', 'account', 'pmail' ],
222 proxy
: { type
: 'proxmox' },
232 text
: gettext('Account'),
233 dataIndex
: 'account',
237 text
: gettext('Primary E-Mail'),
243 initComponent: function() {
247 me
.getStore().getProxy().setUrl(me
.url
);
248 me
.getStore().load();
253 Ext
.define('PMG.LDAPConfig', {
254 extend
: 'Ext.panel.Panel',
255 xtype
: 'pmgLDAPConfig',
258 xclass
: 'Ext.app.ViewController',
260 openUserList: function(grid
, record
) {
261 var name
= this.getViewModel().get('name');
262 Ext
.create('Ext.window.Window', {
263 title
: Ext
.String
.format(gettext("Users of '{0}'"), record
.data
.dn
),
269 xtype
: 'pmgLDAPUserGrid',
271 url
: '/api2/json/config/ldap/' + name
+ '/groups/' + record
.data
.gid
276 showUsers: function(button
) {
278 var view
= me
.lookup('groupgrid');
279 var record
= view
.getSelection()[0];
280 me
.openUserList(view
, record
);
283 openUserMails: function(grid
, record
) {
284 var name
= this.getViewModel().get('name');
285 Ext
.create('Ext.window.Window', {
286 title
: Ext
.String
.format(gettext("E-Mail addresses of '{0}'"), record
.data
.dn
),
296 field
: ['email', 'primary'],
299 url
: '/api2/json/config/ldap/' + name
+ '/users/' + record
.data
.pmail
303 { dataIndex
: 'email', text
: gettext('E-Mail address'), flex
: 1 }
309 showEmails: function(button
) {
311 var view
= me
.lookup('usergrid');
312 var record
= view
.getSelection()[0];
313 me
.openUserMails(view
, record
);
316 reload: function(grid
) {
318 var selection
= grid
.getSelection();
319 me
.showInfo(grid
, selection
);
322 showInfo: function(grid
, selected
) {
324 var viewModel
= me
.getViewModel();
326 var name
= selected
[0].data
.profile
;
327 viewModel
.set('selected', true);
328 viewModel
.set('name', name
);
330 // set grid stores and load them
331 var gstore
= me
.lookup('groupgrid').getStore();
332 var ustore
= me
.lookup('usergrid').getStore();
333 gstore
.getProxy().setUrl('/api2/json/config/ldap/' + name
+ '/groups');
334 ustore
.getProxy().setUrl('/api2/json/config/ldap/' + name
+ '/users');
338 viewModel
.set('selected', false);
342 init: function(view
) {
344 me
.lookup('grid').relayEvents(view
, ['activate']);
345 var groupgrid
= me
.lookup('groupgrid');
346 var usergrid
= me
.lookup('usergrid');
348 Proxmox
.Utils
.monStoreErrors(groupgrid
, groupgrid
.getStore(), true);
349 Proxmox
.Utils
.monStoreErrors(usergrid
, usergrid
.getStore(), true);
353 'grid[reference=grid]': {
354 selectionchange
: 'showInfo',
357 'grid[reference=groupgrid]': {
358 itemdblclick
: 'openUserList'
360 'grid[reference=usergrid]': {
361 itemdblclick
: 'openUserMails'
379 xtype
: 'pmgLDAPConfigGrid',
391 hidden
: '{!selected}'
396 reference
: 'groupgrid',
398 emptyText
: gettext('No data in database'),
400 xtype
: 'proxmoxButton',
401 text
: gettext('Show Users'),
402 handler
: 'showUsers',
406 fields
: ['dn', 'gid'],
407 proxy
: { type
: 'proxmox' },
411 title
: Ext
.String
.format(gettext("Groups of '{0}'"), '{name}')
422 xtype
: 'pmgLDAPUserGrid',
423 reference
: 'usergrid',
426 xtype
: 'proxmoxButton',
427 text
: gettext('Show E-Mail addresses'),
428 handler
: 'showEmails',
432 title
: Ext
.String
.format(gettext("Users of '{0}'"), '{name}')
441 Ext
.define('PMG.LDAPConfigGrid', {
442 extend
: 'Ext.grid.GridPanel',
443 alias
: 'widget.pmgLDAPConfigGrid',
446 xclass
: 'Ext.app.ViewController',
448 run_editor: function() {
450 var view
= me
.getView();
451 var rec
= view
.getSelection()[0];
456 var win
= Ext
.createWidget('pmgLDAPEdit', {
457 profileId
: rec
.data
.profile
459 win
.on('destroy', me
.reload
, me
);
464 newProfile: function() {
466 var win
= Ext
.createWidget('pmgLDAPEdit', {});
467 win
.on('destroy', me
.reload
, me
);
473 var me
= this.getView();
474 me
.getStore().load();
475 me
.fireEvent('load', me
);
480 var view
= me
.getView();
481 var rec
= view
.getSelection()[0];
482 Proxmox
.Utils
.API2Request({
483 url
: '/config/ldap/' + rec
.data
.profile
+ '/sync',
486 callback: function() {
489 failure: function (response
, opts
) {
490 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
495 init: function(view
) {
497 Proxmox
.Utils
.monStoreErrors(view
, view
.getStore(), true);
502 model
: 'pmg-ldap-config',
511 xtype
: 'proxmoxButton',
512 text
: gettext('Edit'),
514 handler
: 'run_editor'
517 text
: gettext('Create'),
518 handler
: 'newProfile'
521 xtype
: 'proxmoxStdRemoveButton',
522 baseurl
: '/config/ldap',
526 xtype
: 'proxmoxButton',
527 text
: gettext('Synchronize'),
528 enableFn: function(rec
) {
529 return !rec
.data
.disable
;
537 itemdblclick
: 'run_editor',
543 header
: gettext('Profile Name'),
549 header
: gettext('Protocol'),
552 renderer
: PMG
.Utils
.format_ldap_protocol
555 header
: gettext('Server'),
557 dataIndex
: 'server1',
558 renderer: function(value
, metaData
, rec
) {
559 if (rec
.data
.server2
) {
560 return value
+ '<br>' + rec
.data
.server2
;
566 header
: gettext('Enabled'),
569 dataIndex
: 'disable',
570 renderer
: Proxmox
.Utils
.format_neg_boolean
573 header
: gettext('Comment'),
575 renderer
: Ext
.String
.htmlEncode
,
576 dataIndex
: 'comment',
580 header
: gettext('Accounts'),
586 header
: gettext('Addresses'),
592 header
: gettext('Groups'),