]>
git.proxmox.com Git - pmg-gui.git/blob - js/LDAPConfig.js
2 Ext
.define('pmg-ldap-config', {
3 extend
: 'Ext.data.Model',
4 fields
: [ 'profile', 'server1', 'server2', 'comment',
5 'mode', 'binddn', 'bindpw', 'basedn', 'groupbasedn',
6 'filter', 'accountattr', 'mailattr',
7 { name
: 'port', type
: 'integer' },
8 { name
: 'gcount', type
: 'integer' },
9 { name
: 'mcount', type
: 'integer' },
10 { name
: 'ucount', type
: 'integer' },
11 { name
: 'disable', type
: 'boolean' }
15 url
: "/api2/json/config/ldap"
20 Ext
.define('PMG.LDAPInputPanel', {
21 extend
: 'Proxmox.panel.InputPanel',
22 alias
: 'widget.pmgLDAPInputPanel',
26 onGetValues: function(values
) {
29 values
.disable
= values
.enable
? 0 : 1;
35 initComponent : function() {
40 xtype
: me
.profileId
? 'displayfield' : 'textfield',
41 fieldLabel
: gettext('Profile Name'),
42 value
: me
.profileId
|| '',
48 xtype
: 'proxmoxKVComboBox',
51 ['ldap', PMG
.Utils
.format_ldap_protocol('ldap')],
52 ['ldaps', PMG
.Utils
.format_ldap_protocol('ldaps')]
55 fieldLabel
: gettext('Protocol')
59 fieldLabel
: gettext('Server'),
65 xtype
: 'proxmoxtextfield',
66 fieldLabel
: gettext('Server'),
68 deleteEmpty
: me
.create
? false : true,
73 xtype
: 'proxmoxintegerfield',
75 emptyText
: gettext('Default'),
76 deleteEmpty
: me
.create
? false : true,
79 fieldLabel
: gettext('Port')
85 fieldLabel
: gettext('User name')
89 inputType
: 'password',
92 fieldLabel
: gettext('Password')
98 xtype
: 'proxmoxcheckbox',
102 fieldLabel
: gettext('Enable')
105 xtype
: 'proxmoxtextfield',
107 deleteEmpty
: me
.create
? false : true,
109 fieldLabel
: gettext('Base DN')
112 xtype
: 'proxmoxtextfield',
114 deleteEmpty
: me
.create
? false : true,
116 fieldLabel
: gettext('Base DN for Groups')
119 xtype
: 'proxmoxtextfield',
121 deleteEmpty
: me
.create
? false : true,
123 fieldLabel
: gettext('EMail attribute name(s)')
126 xtype
: 'proxmoxtextfield',
128 deleteEmpty
: me
.create
? false : true,
130 fieldLabel
: gettext('Account attribute name')
133 xtype
: 'proxmoxtextfield',
135 deleteEmpty
: me
.create
? false : true,
137 fieldLabel
: gettext('LDAP filter')
140 xtype
: 'proxmoxtextfield',
142 deleteEmpty
: me
.create
? false : true,
144 fieldLabel
: gettext('Group objectclass')
151 fieldLabel
: gettext('Comment'),
161 Ext
.define('PMG.LDAPEdit', {
162 extend
: 'Proxmox.window.Edit',
163 alias
: 'widget.pmgLDAPEdit',
165 subject
: 'LDAP Profile',
168 initComponent : function() {
171 me
.create
= me
.profileId
? false : true;
174 me
.url
= '/api2/extjs/config/ldap';
177 me
.url
= '/api2/extjs/config/ldap/' + me
.profileId
+ '/config';
181 var ipanel
= Ext
.create('PMG.LDAPInputPanel', {
183 profileId
: me
.profileId
186 me
.items
= [ ipanel
];
196 success: function(response
, options
) {
197 var values
= response
.result
.data
;
199 values
.enable
= values
.disable
? 0 : 1;
200 ipanel
.setValues(values
);
207 Ext
.define('PMG.LDAPUserGrid', {
208 extend
: 'Ext.grid.Panel',
209 xtype
: 'pmgLDAPUserGrid',
211 emptyText
: gettext('No data in database'),
214 fields
: [ 'dn', 'account', 'pmail' ],
215 proxy
: { type
: 'proxmox' },
225 text
: gettext('Account'),
226 dataIndex
: 'account',
230 text
: gettext('Primary E-Mail'),
236 initComponent: function() {
240 me
.getStore().getProxy().setUrl(me
.url
);
241 me
.getStore().load();
246 Ext
.define('PMG.LDAPConfig', {
247 extend
: 'Ext.panel.Panel',
248 xtype
: 'pmgLDAPConfig',
251 xclass
: 'Ext.app.ViewController',
253 openUserList: function(grid
, record
) {
254 var name
= this.getViewModel().get('name');
255 Ext
.create('Ext.window.Window', {
256 title
: Ext
.String
.format(gettext("Users of '{0}'"), record
.data
.dn
),
262 xtype
: 'pmgLDAPUserGrid',
264 url
: '/api2/json/config/ldap/' + name
+ '/groups/' + record
.data
.gid
269 showUsers: function(button
) {
271 var view
= me
.lookup('groupgrid');
272 var record
= view
.getSelection()[0];
273 me
.openUserList(view
, record
);
276 openUserMails: function(grid
, record
) {
277 var name
= this.getViewModel().get('name');
278 Ext
.create('Ext.window.Window', {
279 title
: Ext
.String
.format(gettext("E-Mail addresses of '{0}'"), record
.data
.dn
),
289 field
: ['email', 'primary'],
292 url
: '/api2/json/config/ldap/' + name
+ '/users/' + record
.data
.pmail
296 { dataIndex
: 'email', text
: gettext('E-Mail address'), flex
: 1 }
302 showEmails: function(button
) {
304 var view
= me
.lookup('usergrid');
305 var record
= view
.getSelection()[0];
306 me
.openUserMails(view
, record
);
309 reload: function(grid
) {
311 var selection
= grid
.getSelection();
312 me
.showInfo(grid
, selection
);
315 showInfo: function(grid
, selected
) {
317 var viewModel
= me
.getViewModel();
318 var grid
= me
.lookup('data');
320 var name
= selected
[0].data
.profile
;
321 viewModel
.set('selected', true);
322 viewModel
.set('name', name
);
324 // set grid stores and load them
325 var gstore
= me
.lookup('groupgrid').getStore();
326 var ustore
= me
.lookup('usergrid').getStore();
327 gstore
.getProxy().setUrl('/api2/json/config/ldap/' + name
+ '/groups');
328 ustore
.getProxy().setUrl('/api2/json/config/ldap/' + name
+ '/users');
332 viewModel
.set('selected', false);
336 init: function(view
) {
338 me
.lookup('grid').relayEvents(view
, ['activate']);
339 var groupgrid
= me
.lookup('groupgrid');
340 var usergrid
= me
.lookup('usergrid');
342 Proxmox
.Utils
.monStoreErrors(groupgrid
, groupgrid
.getStore(), true);
343 Proxmox
.Utils
.monStoreErrors(usergrid
, usergrid
.getStore(), true);
347 'grid[reference=grid]': {
348 selectionchange
: 'showInfo',
351 'grid[reference=groupgrid]': {
352 itemdblclick
: 'openUserList'
354 'grid[reference=usergrid]': {
355 itemdblclick
: 'openUserMails'
375 xtype
: 'pmgLDAPConfigGrid',
387 hidden
: '{!selected}'
392 reference
: 'groupgrid',
394 emptyText
: gettext('No data in database'),
396 xtype
: 'proxmoxButton',
397 text
: gettext('Show Users'),
398 handler
: 'showUsers',
402 fields
: ['dn', 'gid'],
403 proxy
: { type
: 'proxmox' },
407 title
: Ext
.String
.format(gettext("Groups of '{0}'"), '{name}')
418 xtype
: 'pmgLDAPUserGrid',
419 reference
: 'usergrid',
422 xtype
: 'proxmoxButton',
423 text
: gettext('Show E-Mail addresses'),
424 handler
: 'showEmails',
428 title
: Ext
.String
.format(gettext("Users of '{0}'"), '{name}')
437 Ext
.define('PMG.LDAPConfigGrid', {
438 extend
: 'Ext.grid.GridPanel',
439 alias
: 'widget.pmgLDAPConfigGrid',
442 xclass
: 'Ext.app.ViewController',
444 run_editor: function() {
446 var view
= me
.getView();
447 var rec
= view
.getSelection()[0];
452 var win
= Ext
.createWidget('pmgLDAPEdit', {
453 profileId
: rec
.data
.profile
455 win
.on('destroy', me
.reload
, me
);
462 var win
= Ext
.createWidget('pmgLDAPEdit', {});
463 win
.on('destroy', me
.reload
, me
);
469 var me
= this.getView();
470 me
.getStore().load();
471 me
.fireEvent('load', me
);
476 var view
= me
.getView();
477 var rec
= view
.getSelection()[0];
478 Proxmox
.Utils
.API2Request({
479 url
: '/config/ldap/' + rec
.data
.profile
+ '/sync',
482 callback: function() {
485 failure: function (response
, opts
) {
486 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
491 init: function(view
) {
493 Proxmox
.Utils
.monStoreErrors(view
, view
.getStore(), true);
498 model
: 'pmg-ldap-config',
507 xtype
: 'proxmoxButton',
508 text
: gettext('Edit'),
510 handler
: 'run_editor'
513 text
: gettext('Create'),
517 xtype
: 'proxmoxStdRemoveButton',
518 baseurl
: '/config/ldap',
522 xtype
: 'proxmoxButton',
523 text
: gettext('Synchronize'),
524 enableFn: function(rec
) {
525 return !rec
.data
.disable
;
533 itemdblclick
: 'run_editor',
539 header
: gettext('Profile Name'),
545 header
: gettext('Protocol'),
548 renderer
: PMG
.Utils
.format_ldap_protocol
551 header
: gettext('Server'),
553 dataIndex
: 'server1',
554 renderer: function(value
, metaData
, rec
) {
555 if (rec
.data
.server2
) {
556 return value
+ '<br>' + rec
.data
.server2
;
562 header
: gettext('Enabled'),
565 dataIndex
: 'disable',
566 renderer
: Proxmox
.Utils
.format_neg_boolean
569 header
: gettext('Comment'),
571 renderer
: Ext
.String
.htmlEncode
,
572 dataIndex
: 'comment',
576 header
: gettext('Accounts'),
582 header
: gettext('Addresses'),
588 header
: gettext('Groups'),