]>
git.proxmox.com Git - pmg-gui.git/blob - 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' },
14 url
: "/api2/json/config/ldap",
16 idProperty
: 'profile',
19 Ext
.define('PMG.LDAPInputPanel', {
20 extend
: 'Proxmox.panel.InputPanel',
21 alias
: 'widget.pmgLDAPInputPanel',
25 onGetValues: function(values
) {
28 values
.disable
= values
.enable
? 0 : 1;
31 // do not send empty password
32 if (values
.bindpw
=== '') {
39 initComponent: function() {
44 xtype
: me
.profileId
? 'displayfield' : 'textfield',
45 fieldLabel
: gettext('Profile Name'),
46 value
: me
.profileId
|| '',
52 xtype
: 'proxmoxKVComboBox',
55 ['ldap', PMG
.Utils
.format_ldap_protocol('ldap')],
56 ['ldaps', PMG
.Utils
.format_ldap_protocol('ldaps')],
57 ['ldap+starttls', PMG
.Utils
.format_ldap_protocol('ldap+starttls')],
60 fieldLabel
: gettext('Protocol'),
62 change: function(cb
, value
) {
63 var isldap
= value
=== 'ldap';
64 me
.down('field[name=verify]').setVisible(!isldap
);
69 xtype
: 'proxmoxcheckbox',
71 fieldLabel
: gettext('Verify Certificate'),
79 fieldLabel
: gettext('Server'),
85 xtype
: 'proxmoxtextfield',
86 fieldLabel
: gettext('Server'),
88 deleteEmpty
: !me
.isCreate
,
93 xtype
: 'proxmoxintegerfield',
95 emptyText
: gettext('Default'),
96 deleteEmpty
: !me
.isCreate
,
99 fieldLabel
: gettext('Port'),
105 fieldLabel
: gettext('User name'),
109 inputType
: 'password',
111 emptyText
: gettext('Unchanged'),
113 fieldLabel
: gettext('Password'),
119 xtype
: 'proxmoxcheckbox',
123 fieldLabel
: gettext('Enable'),
126 xtype
: 'proxmoxtextfield',
128 deleteEmpty
: !me
.isCreate
,
130 fieldLabel
: gettext('Base DN'),
133 xtype
: 'proxmoxtextfield',
135 deleteEmpty
: !me
.isCreate
,
137 fieldLabel
: gettext('Base DN for Groups'),
140 xtype
: 'proxmoxtextfield',
142 deleteEmpty
: !me
.isCreate
,
144 fieldLabel
: gettext('EMail attribute name(s)'),
147 xtype
: 'proxmoxtextfield',
149 deleteEmpty
: !me
.isCreate
,
151 fieldLabel
: gettext('Account attribute name'),
154 xtype
: 'proxmoxtextfield',
156 deleteEmpty
: !me
.isCreate
,
158 fieldLabel
: gettext('LDAP filter'),
161 xtype
: 'proxmoxtextfield',
163 deleteEmpty
: !me
.isCreate
,
165 fieldLabel
: gettext('Group objectclass'),
172 fieldLabel
: gettext('Comment'),
182 Ext
.define('PMG.LDAPEdit', {
183 extend
: 'Proxmox.window.Edit',
184 alias
: 'widget.pmgLDAPEdit',
185 onlineHelp
: 'pmgconfig_ldap',
187 subject
: 'LDAP Profile',
190 initComponent: function() {
193 me
.isCreate
= !me
.profileId
;
196 me
.url
= '/api2/extjs/config/ldap';
199 me
.url
= '/api2/extjs/config/ldap/' + me
.profileId
+ '/config';
203 var ipanel
= Ext
.create('PMG.LDAPInputPanel', {
204 isCreate
: me
.isCreate
,
205 profileId
: me
.profileId
,
218 success: function(response
, options
) {
219 var values
= response
.result
.data
;
221 values
.enable
= values
.disable
? 0 : 1;
222 values
.verify
= !!values
.verify
;
223 ipanel
.setValues(values
);
230 Ext
.define('PMG.LDAPUserGrid', {
231 extend
: 'Ext.grid.Panel',
232 xtype
: 'pmgLDAPUserGrid',
234 emptyText
: gettext('No data in database'),
237 fields
: ['dn', 'account', 'pmail'],
238 proxy
: { type
: 'proxmox' },
248 text
: gettext('Account'),
249 dataIndex
: 'account',
253 text
: gettext('Primary E-Mail'),
259 initComponent: function() {
263 me
.getStore().getProxy().setUrl(me
.url
);
264 me
.getStore().load();
269 Ext
.define('PMG.LDAPConfig', {
270 extend
: 'Ext.panel.Panel',
271 xtype
: 'pmgLDAPConfig',
274 xclass
: 'Ext.app.ViewController',
276 openUserList: function(grid
, record
) {
277 var name
= this.getViewModel().get('name');
278 Ext
.create('Ext.window.Window', {
279 title
: Ext
.String
.format(gettext("Users of '{0}'"), record
.data
.dn
),
285 xtype
: 'pmgLDAPUserGrid',
287 url
: '/api2/json/config/ldap/' + name
+ '/groups/' + encodeURIComponent(record
.data
.gid
),
292 showUsers: function(button
) {
294 var view
= me
.lookup('groupgrid');
295 var record
= view
.getSelection()[0];
296 me
.openUserList(view
, record
);
299 openUserMails: function(grid
, record
) {
300 var name
= this.getViewModel().get('name');
301 Ext
.create('Ext.window.Window', {
302 title
: Ext
.String
.format(gettext("E-Mail addresses of '{0}'"), record
.data
.dn
),
312 field
: ['email', 'primary'],
315 url
: '/api2/json/config/ldap/' + name
+ '/users/' + encodeURIComponent(record
.data
.pmail
),
319 { dataIndex
: 'email', text
: gettext('E-Mail address'), flex
: 1 },
325 showEmails: function(button
) {
327 var view
= me
.lookup('usergrid');
328 var record
= view
.getSelection()[0];
329 me
.openUserMails(view
, record
);
332 reload: function(grid
) {
334 var selection
= grid
.getSelection();
335 me
.showInfo(grid
, selection
);
338 showInfo: function(grid
, selected
) {
340 var viewModel
= me
.getViewModel();
342 var name
= selected
[0].data
.profile
;
343 viewModel
.set('selected', true);
344 viewModel
.set('name', name
);
346 // set grid stores and load them
347 var gstore
= me
.lookup('groupgrid').getStore();
348 var ustore
= me
.lookup('usergrid').getStore();
349 gstore
.getProxy().setUrl('/api2/json/config/ldap/' + name
+ '/groups');
350 ustore
.getProxy().setUrl('/api2/json/config/ldap/' + name
+ '/users');
354 viewModel
.set('selected', false);
358 init: function(view
) {
360 me
.lookup('grid').relayEvents(view
, ['activate']);
361 var groupgrid
= me
.lookup('groupgrid');
362 var usergrid
= me
.lookup('usergrid');
364 Proxmox
.Utils
.monStoreErrors(groupgrid
, groupgrid
.getStore(), true);
365 Proxmox
.Utils
.monStoreErrors(usergrid
, usergrid
.getStore(), true);
369 'grid[reference=grid]': {
370 selectionchange
: 'showInfo',
373 'grid[reference=groupgrid]': {
374 itemdblclick
: 'openUserList',
376 'grid[reference=usergrid]': {
377 itemdblclick
: 'openUserMails',
395 xtype
: 'pmgLDAPConfigGrid',
407 hidden
: '{!selected}',
412 reference
: 'groupgrid',
414 emptyText
: gettext('No data in database'),
416 xtype
: 'proxmoxButton',
417 text
: gettext('Show Users'),
418 handler
: 'showUsers',
422 fields
: ['dn', 'gid'],
423 proxy
: { type
: 'proxmox' },
427 title
: Ext
.String
.format(gettext("Groups of '{0}'"), '{name}'),
438 xtype
: 'pmgLDAPUserGrid',
439 reference
: 'usergrid',
442 xtype
: 'proxmoxButton',
443 text
: gettext('Show E-Mail addresses'),
444 handler
: 'showEmails',
448 title
: Ext
.String
.format(gettext("Users of '{0}'"), '{name}'),
457 Ext
.define('PMG.LDAPConfigGrid', {
458 extend
: 'Ext.grid.GridPanel',
459 alias
: 'widget.pmgLDAPConfigGrid',
462 xclass
: 'Ext.app.ViewController',
464 run_editor: function() {
466 var view
= me
.getView();
467 var rec
= view
.getSelection()[0];
472 var win
= Ext
.createWidget('pmgLDAPEdit', {
473 profileId
: rec
.data
.profile
,
475 win
.on('destroy', me
.reload
, me
);
480 newProfile: function() {
482 var win
= Ext
.createWidget('pmgLDAPEdit', {});
483 win
.on('destroy', me
.reload
, me
);
489 let view
= this.getView();
490 view
.getStore().load();
491 view
.fireEvent('load', view
);
496 var view
= me
.getView();
497 var rec
= view
.getSelection()[0];
498 Proxmox
.Utils
.API2Request({
499 url
: '/config/ldap/' + rec
.data
.profile
+ '/sync',
502 callback: function() {
505 failure: function(response
, opts
) {
506 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
511 init: function(view
) {
513 Proxmox
.Utils
.monStoreErrors(view
, view
.getStore(), true);
518 model
: 'pmg-ldap-config',
527 xtype
: 'proxmoxButton',
528 text
: gettext('Edit'),
530 handler
: 'run_editor',
533 text
: gettext('Create'),
534 handler
: 'newProfile',
537 xtype
: 'proxmoxStdRemoveButton',
538 baseurl
: '/config/ldap',
542 xtype
: 'proxmoxButton',
543 text
: gettext('Synchronize'),
544 enableFn: function(rec
) {
545 return !rec
.data
.disable
;
553 itemdblclick
: 'run_editor',
559 header
: gettext('Profile Name'),
562 dataIndex
: 'profile',
565 header
: gettext('Protocol'),
568 renderer
: PMG
.Utils
.format_ldap_protocol
,
571 header
: gettext('Server'),
573 dataIndex
: 'server1',
574 renderer: function(value
, metaData
, rec
) {
575 if (rec
.data
.server2
) {
576 return value
+ '<br>' + rec
.data
.server2
;
582 header
: gettext('Enabled'),
585 dataIndex
: 'disable',
586 renderer
: Proxmox
.Utils
.format_neg_boolean
,
589 header
: gettext('Comment'),
591 renderer
: Ext
.String
.htmlEncode
,
592 dataIndex
: 'comment',
596 header
: gettext('Accounts'),
602 header
: gettext('Addresses'),
608 header
: gettext('Groups'),