]>
git.proxmox.com Git - pmg-gui.git/blob - js/LDAPConfig.js
6bea55d2ac9e8c786e3406276f278e7db3dcd7f0
2 /*jslint confusion: true*/
3 /*create is function and bool,
4 * reload is function and string,
5 * height is number and string,
6 * hidden is bool and string,
7 * bind is function and object,
8 * callback is function and string
10 Ext
.define('pmg-ldap-config', {
11 extend
: 'Ext.data.Model',
12 fields
: [ 'profile', 'server1', 'server2', 'comment',
13 'mode', 'binddn', 'bindpw', 'basedn', 'groupbasedn',
14 'filter', 'accountattr', 'mailattr',
15 { name
: 'port', type
: 'integer' },
16 { name
: 'gcount', type
: 'integer' },
17 { name
: 'mcount', type
: 'integer' },
18 { name
: 'ucount', type
: 'integer' },
19 { name
: 'disable', type
: 'boolean' }
23 url
: "/api2/json/config/ldap"
28 Ext
.define('PMG.LDAPInputPanel', {
29 extend
: 'Proxmox.panel.InputPanel',
30 alias
: 'widget.pmgLDAPInputPanel',
34 onGetValues: function(values
) {
37 values
.disable
= values
.enable
? 0 : 1;
43 initComponent : function() {
48 xtype
: me
.profileId
? 'displayfield' : 'textfield',
49 fieldLabel
: gettext('Profile Name'),
50 value
: me
.profileId
|| '',
56 xtype
: 'proxmoxKVComboBox',
59 ['ldap', PMG
.Utils
.format_ldap_protocol('ldap')],
60 ['ldaps', PMG
.Utils
.format_ldap_protocol('ldaps')]
63 fieldLabel
: gettext('Protocol')
67 fieldLabel
: gettext('Server'),
73 xtype
: 'proxmoxtextfield',
74 fieldLabel
: gettext('Server'),
76 deleteEmpty
: me
.create
? false : true,
81 xtype
: 'proxmoxintegerfield',
83 emptyText
: gettext('Default'),
84 deleteEmpty
: me
.create
? false : true,
87 fieldLabel
: gettext('Port')
93 fieldLabel
: gettext('User name')
97 inputType
: 'password',
100 fieldLabel
: gettext('Password')
106 xtype
: 'proxmoxcheckbox',
110 fieldLabel
: gettext('Enable')
113 xtype
: 'proxmoxtextfield',
115 deleteEmpty
: me
.create
? false : true,
117 fieldLabel
: gettext('Base DN')
120 xtype
: 'proxmoxtextfield',
122 deleteEmpty
: me
.create
? false : true,
124 fieldLabel
: gettext('Base DN for Groups')
127 xtype
: 'proxmoxtextfield',
129 deleteEmpty
: me
.create
? false : true,
131 fieldLabel
: gettext('EMail attribute name(s)')
134 xtype
: 'proxmoxtextfield',
136 deleteEmpty
: me
.create
? false : true,
138 fieldLabel
: gettext('Account attribute name')
141 xtype
: 'proxmoxtextfield',
143 deleteEmpty
: me
.create
? false : true,
145 fieldLabel
: gettext('LDAP filter')
148 xtype
: 'proxmoxtextfield',
150 deleteEmpty
: me
.create
? false : true,
152 fieldLabel
: gettext('Group objectclass')
159 fieldLabel
: gettext('Comment'),
169 Ext
.define('PMG.LDAPEdit', {
170 extend
: 'Proxmox.window.Edit',
171 alias
: 'widget.pmgLDAPEdit',
173 subject
: 'LDAP Profile',
176 initComponent : function() {
179 me
.create
= me
.profileId
? false : true;
182 me
.url
= '/api2/extjs/config/ldap';
185 me
.url
= '/api2/extjs/config/ldap/' + me
.profileId
+ '/config';
189 var ipanel
= Ext
.create('PMG.LDAPInputPanel', {
191 profileId
: me
.profileId
194 me
.items
= [ ipanel
];
204 success: function(response
, options
) {
205 var values
= response
.result
.data
;
207 values
.enable
= values
.disable
? 0 : 1;
208 ipanel
.setValues(values
);
215 Ext
.define('PMG.LDAPUserGrid', {
216 extend
: 'Ext.grid.Panel',
217 xtype
: 'pmgLDAPUserGrid',
219 emptyText
: gettext('No data in database'),
222 fields
: [ 'dn', 'account', 'pmail' ],
223 proxy
: { type
: 'proxmox' },
233 text
: gettext('Account'),
234 dataIndex
: 'account',
238 text
: gettext('Primary E-Mail'),
244 initComponent: function() {
248 me
.getStore().getProxy().setUrl(me
.url
);
249 me
.getStore().load();
254 Ext
.define('PMG.LDAPConfig', {
255 extend
: 'Ext.panel.Panel',
256 xtype
: 'pmgLDAPConfig',
259 xclass
: 'Ext.app.ViewController',
261 openUserList: function(grid
, record
) {
262 var name
= this.getViewModel().get('name');
263 Ext
.create('Ext.window.Window', {
264 title
: Ext
.String
.format(gettext("Users of '{0}'"), record
.data
.dn
),
270 xtype
: 'pmgLDAPUserGrid',
272 url
: '/api2/json/config/ldap/' + name
+ '/groups/' + record
.data
.gid
277 showUsers: function(button
) {
279 var view
= me
.lookup('groupgrid');
280 var record
= view
.getSelection()[0];
281 me
.openUserList(view
, record
);
284 openUserMails: function(grid
, record
) {
285 var name
= this.getViewModel().get('name');
286 Ext
.create('Ext.window.Window', {
287 title
: Ext
.String
.format(gettext("E-Mail addresses of '{0}'"), record
.data
.dn
),
297 field
: ['email', 'primary'],
300 url
: '/api2/json/config/ldap/' + name
+ '/users/' + record
.data
.pmail
304 { dataIndex
: 'email', text
: gettext('E-Mail address'), flex
: 1 }
310 showEmails: function(button
) {
312 var view
= me
.lookup('usergrid');
313 var record
= view
.getSelection()[0];
314 me
.openUserMails(view
, record
);
317 reload: function(grid
) {
319 var selection
= grid
.getSelection();
320 me
.showInfo(grid
, selection
);
323 showInfo: function(grid
, selected
) {
325 var viewModel
= me
.getViewModel();
327 var name
= selected
[0].data
.profile
;
328 viewModel
.set('selected', true);
329 viewModel
.set('name', name
);
331 // set grid stores and load them
332 var gstore
= me
.lookup('groupgrid').getStore();
333 var ustore
= me
.lookup('usergrid').getStore();
334 gstore
.getProxy().setUrl('/api2/json/config/ldap/' + name
+ '/groups');
335 ustore
.getProxy().setUrl('/api2/json/config/ldap/' + name
+ '/users');
339 viewModel
.set('selected', false);
343 init: function(view
) {
345 me
.lookup('grid').relayEvents(view
, ['activate']);
346 var groupgrid
= me
.lookup('groupgrid');
347 var usergrid
= me
.lookup('usergrid');
349 Proxmox
.Utils
.monStoreErrors(groupgrid
, groupgrid
.getStore(), true);
350 Proxmox
.Utils
.monStoreErrors(usergrid
, usergrid
.getStore(), true);
354 'grid[reference=grid]': {
355 selectionchange
: 'showInfo',
358 'grid[reference=groupgrid]': {
359 itemdblclick
: 'openUserList'
361 'grid[reference=usergrid]': {
362 itemdblclick
: 'openUserMails'
380 xtype
: 'pmgLDAPConfigGrid',
392 hidden
: '{!selected}'
397 reference
: 'groupgrid',
399 emptyText
: gettext('No data in database'),
401 xtype
: 'proxmoxButton',
402 text
: gettext('Show Users'),
403 handler
: 'showUsers',
407 fields
: ['dn', 'gid'],
408 proxy
: { type
: 'proxmox' },
412 title
: Ext
.String
.format(gettext("Groups of '{0}'"), '{name}')
423 xtype
: 'pmgLDAPUserGrid',
424 reference
: 'usergrid',
427 xtype
: 'proxmoxButton',
428 text
: gettext('Show E-Mail addresses'),
429 handler
: 'showEmails',
433 title
: Ext
.String
.format(gettext("Users of '{0}'"), '{name}')
442 Ext
.define('PMG.LDAPConfigGrid', {
443 extend
: 'Ext.grid.GridPanel',
444 alias
: 'widget.pmgLDAPConfigGrid',
447 xclass
: 'Ext.app.ViewController',
449 run_editor: function() {
451 var view
= me
.getView();
452 var rec
= view
.getSelection()[0];
457 var win
= Ext
.createWidget('pmgLDAPEdit', {
458 profileId
: rec
.data
.profile
460 win
.on('destroy', me
.reload
, me
);
465 newProfile: function() {
467 var win
= Ext
.createWidget('pmgLDAPEdit', {});
468 win
.on('destroy', me
.reload
, me
);
474 var me
= this.getView();
475 me
.getStore().load();
476 me
.fireEvent('load', me
);
481 var view
= me
.getView();
482 var rec
= view
.getSelection()[0];
483 Proxmox
.Utils
.API2Request({
484 url
: '/config/ldap/' + rec
.data
.profile
+ '/sync',
487 callback: function() {
490 failure: function (response
, opts
) {
491 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
496 init: function(view
) {
498 Proxmox
.Utils
.monStoreErrors(view
, view
.getStore(), true);
503 model
: 'pmg-ldap-config',
512 xtype
: 'proxmoxButton',
513 text
: gettext('Edit'),
515 handler
: 'run_editor'
518 text
: gettext('Create'),
519 handler
: 'newProfile'
522 xtype
: 'proxmoxStdRemoveButton',
523 baseurl
: '/config/ldap',
527 xtype
: 'proxmoxButton',
528 text
: gettext('Synchronize'),
529 enableFn: function(rec
) {
530 return !rec
.data
.disable
;
538 itemdblclick
: 'run_editor',
544 header
: gettext('Profile Name'),
550 header
: gettext('Protocol'),
553 renderer
: PMG
.Utils
.format_ldap_protocol
556 header
: gettext('Server'),
558 dataIndex
: 'server1',
559 renderer: function(value
, metaData
, rec
) {
560 if (rec
.data
.server2
) {
561 return value
+ '<br>' + rec
.data
.server2
;
567 header
: gettext('Enabled'),
570 dataIndex
: 'disable',
571 renderer
: Proxmox
.Utils
.format_neg_boolean
574 header
: gettext('Comment'),
576 renderer
: Ext
.String
.htmlEncode
,
577 dataIndex
: 'comment',
581 header
: gettext('Accounts'),
587 header
: gettext('Addresses'),
593 header
: gettext('Groups'),