]>
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;
34 initComponent: function() {
39 xtype
: me
.profileId
? 'displayfield' : 'textfield',
40 fieldLabel
: gettext('Profile Name'),
41 value
: me
.profileId
|| '',
47 xtype
: 'proxmoxKVComboBox',
50 ['ldap', PMG
.Utils
.format_ldap_protocol('ldap')],
51 ['ldaps', PMG
.Utils
.format_ldap_protocol('ldaps')],
52 ['ldap+starttls', PMG
.Utils
.format_ldap_protocol('ldap+starttls')],
55 fieldLabel
: gettext('Protocol'),
57 change: function(cb
, value
) {
58 var isldap
= value
=== 'ldap';
59 me
.down('field[name=verify]').setVisible(!isldap
);
64 xtype
: 'proxmoxcheckbox',
66 fieldLabel
: gettext('Verify Certificate'),
74 fieldLabel
: gettext('Server'),
80 xtype
: 'proxmoxtextfield',
81 fieldLabel
: gettext('Server'),
83 deleteEmpty
: !me
.isCreate
,
88 xtype
: 'proxmoxintegerfield',
90 emptyText
: gettext('Default'),
91 deleteEmpty
: !me
.isCreate
,
94 fieldLabel
: gettext('Port'),
100 fieldLabel
: gettext('User name'),
104 inputType
: 'password',
107 fieldLabel
: gettext('Password'),
113 xtype
: 'proxmoxcheckbox',
117 fieldLabel
: gettext('Enable'),
120 xtype
: 'proxmoxtextfield',
122 deleteEmpty
: !me
.isCreate
,
124 fieldLabel
: gettext('Base DN'),
127 xtype
: 'proxmoxtextfield',
129 deleteEmpty
: !me
.isCreate
,
131 fieldLabel
: gettext('Base DN for Groups'),
134 xtype
: 'proxmoxtextfield',
136 deleteEmpty
: !me
.isCreate
,
138 fieldLabel
: gettext('EMail attribute name(s)'),
141 xtype
: 'proxmoxtextfield',
143 deleteEmpty
: !me
.isCreate
,
145 fieldLabel
: gettext('Account attribute name'),
148 xtype
: 'proxmoxtextfield',
150 deleteEmpty
: !me
.isCreate
,
152 fieldLabel
: gettext('LDAP filter'),
155 xtype
: 'proxmoxtextfield',
157 deleteEmpty
: !me
.isCreate
,
159 fieldLabel
: gettext('Group objectclass'),
166 fieldLabel
: gettext('Comment'),
176 Ext
.define('PMG.LDAPEdit', {
177 extend
: 'Proxmox.window.Edit',
178 alias
: 'widget.pmgLDAPEdit',
179 onlineHelp
: 'pmgconfig_ldap',
181 subject
: 'LDAP Profile',
184 initComponent: function() {
187 me
.isCreate
= !me
.profileId
;
190 me
.url
= '/api2/extjs/config/ldap';
193 me
.url
= '/api2/extjs/config/ldap/' + me
.profileId
+ '/config';
197 var ipanel
= Ext
.create('PMG.LDAPInputPanel', {
198 isCreate
: me
.isCreate
,
199 profileId
: me
.profileId
,
212 success: function(response
, options
) {
213 var values
= response
.result
.data
;
215 values
.enable
= values
.disable
? 0 : 1;
216 values
.verify
= !!values
.verify
;
217 ipanel
.setValues(values
);
224 Ext
.define('PMG.LDAPUserGrid', {
225 extend
: 'Ext.grid.Panel',
226 xtype
: 'pmgLDAPUserGrid',
228 emptyText
: gettext('No data in database'),
231 fields
: ['dn', 'account', 'pmail'],
232 proxy
: { type
: 'proxmox' },
242 text
: gettext('Account'),
243 dataIndex
: 'account',
247 text
: gettext('Primary E-Mail'),
253 initComponent: function() {
257 me
.getStore().getProxy().setUrl(me
.url
);
258 me
.getStore().load();
263 Ext
.define('PMG.LDAPConfig', {
264 extend
: 'Ext.panel.Panel',
265 xtype
: 'pmgLDAPConfig',
268 xclass
: 'Ext.app.ViewController',
270 openUserList: function(grid
, record
) {
271 var name
= this.getViewModel().get('name');
272 Ext
.create('Ext.window.Window', {
273 title
: Ext
.String
.format(gettext("Users of '{0}'"), record
.data
.dn
),
279 xtype
: 'pmgLDAPUserGrid',
281 url
: '/api2/json/config/ldap/' + name
+ '/groups/' + encodeURIComponent(record
.data
.gid
),
286 showUsers: function(button
) {
288 var view
= me
.lookup('groupgrid');
289 var record
= view
.getSelection()[0];
290 me
.openUserList(view
, record
);
293 openUserMails: function(grid
, record
) {
294 var name
= this.getViewModel().get('name');
295 Ext
.create('Ext.window.Window', {
296 title
: Ext
.String
.format(gettext("E-Mail addresses of '{0}'"), record
.data
.dn
),
306 field
: ['email', 'primary'],
309 url
: '/api2/json/config/ldap/' + name
+ '/users/' + encodeURIComponent(record
.data
.pmail
),
313 { dataIndex
: 'email', text
: gettext('E-Mail address'), flex
: 1 },
319 showEmails: function(button
) {
321 var view
= me
.lookup('usergrid');
322 var record
= view
.getSelection()[0];
323 me
.openUserMails(view
, record
);
326 reload: function(grid
) {
328 var selection
= grid
.getSelection();
329 me
.showInfo(grid
, selection
);
332 showInfo: function(grid
, selected
) {
334 var viewModel
= me
.getViewModel();
336 var name
= selected
[0].data
.profile
;
337 viewModel
.set('selected', true);
338 viewModel
.set('name', name
);
340 // set grid stores and load them
341 var gstore
= me
.lookup('groupgrid').getStore();
342 var ustore
= me
.lookup('usergrid').getStore();
343 gstore
.getProxy().setUrl('/api2/json/config/ldap/' + name
+ '/groups');
344 ustore
.getProxy().setUrl('/api2/json/config/ldap/' + name
+ '/users');
348 viewModel
.set('selected', false);
352 init: function(view
) {
354 me
.lookup('grid').relayEvents(view
, ['activate']);
355 var groupgrid
= me
.lookup('groupgrid');
356 var usergrid
= me
.lookup('usergrid');
358 Proxmox
.Utils
.monStoreErrors(groupgrid
, groupgrid
.getStore(), true);
359 Proxmox
.Utils
.monStoreErrors(usergrid
, usergrid
.getStore(), true);
363 'grid[reference=grid]': {
364 selectionchange
: 'showInfo',
367 'grid[reference=groupgrid]': {
368 itemdblclick
: 'openUserList',
370 'grid[reference=usergrid]': {
371 itemdblclick
: 'openUserMails',
389 xtype
: 'pmgLDAPConfigGrid',
401 hidden
: '{!selected}',
406 reference
: 'groupgrid',
408 emptyText
: gettext('No data in database'),
410 xtype
: 'proxmoxButton',
411 text
: gettext('Show Users'),
412 handler
: 'showUsers',
416 fields
: ['dn', 'gid'],
417 proxy
: { type
: 'proxmox' },
421 title
: Ext
.String
.format(gettext("Groups of '{0}'"), '{name}'),
432 xtype
: 'pmgLDAPUserGrid',
433 reference
: 'usergrid',
436 xtype
: 'proxmoxButton',
437 text
: gettext('Show E-Mail addresses'),
438 handler
: 'showEmails',
442 title
: Ext
.String
.format(gettext("Users of '{0}'"), '{name}'),
451 Ext
.define('PMG.LDAPConfigGrid', {
452 extend
: 'Ext.grid.GridPanel',
453 alias
: 'widget.pmgLDAPConfigGrid',
456 xclass
: 'Ext.app.ViewController',
458 run_editor: function() {
460 var view
= me
.getView();
461 var rec
= view
.getSelection()[0];
466 var win
= Ext
.createWidget('pmgLDAPEdit', {
467 profileId
: rec
.data
.profile
,
469 win
.on('destroy', me
.reload
, me
);
474 newProfile: function() {
476 var win
= Ext
.createWidget('pmgLDAPEdit', {});
477 win
.on('destroy', me
.reload
, me
);
483 let view
= this.getView();
484 view
.getStore().load();
485 view
.fireEvent('load', view
);
490 var view
= me
.getView();
491 var rec
= view
.getSelection()[0];
492 Proxmox
.Utils
.API2Request({
493 url
: '/config/ldap/' + rec
.data
.profile
+ '/sync',
496 callback: function() {
499 failure: function(response
, opts
) {
500 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
505 init: function(view
) {
507 Proxmox
.Utils
.monStoreErrors(view
, view
.getStore(), true);
512 model
: 'pmg-ldap-config',
521 xtype
: 'proxmoxButton',
522 text
: gettext('Edit'),
524 handler
: 'run_editor',
527 text
: gettext('Create'),
528 handler
: 'newProfile',
531 xtype
: 'proxmoxStdRemoveButton',
532 baseurl
: '/config/ldap',
536 xtype
: 'proxmoxButton',
537 text
: gettext('Synchronize'),
538 enableFn: function(rec
) {
539 return !rec
.data
.disable
;
547 itemdblclick
: 'run_editor',
553 header
: gettext('Profile Name'),
556 dataIndex
: 'profile',
559 header
: gettext('Protocol'),
562 renderer
: PMG
.Utils
.format_ldap_protocol
,
565 header
: gettext('Server'),
567 dataIndex
: 'server1',
568 renderer: function(value
, metaData
, rec
) {
569 if (rec
.data
.server2
) {
570 return value
+ '<br>' + rec
.data
.server2
;
576 header
: gettext('Enabled'),
579 dataIndex
: 'disable',
580 renderer
: Proxmox
.Utils
.format_neg_boolean
,
583 header
: gettext('Comment'),
585 renderer
: Ext
.String
.htmlEncode
,
586 dataIndex
: 'comment',
590 header
: gettext('Accounts'),
596 header
: gettext('Addresses'),
602 header
: gettext('Groups'),