]> git.proxmox.com Git - pmg-gui.git/blobdiff - js/LDAPConfig.js
quarantines: fix the default behavior of the theme toggle button
[pmg-gui.git] / js / LDAPConfig.js
index 71760df4e6b2c166ef721b1d0dce586a096e65b2..0a114ff4f50080422f84369925904713230268f0 100644 (file)
@@ -1,27 +1,19 @@
-/*global Proxmox*/
-/*jslint confusion: true*/
-/* reload is function and string,
- * height is number and string,
- * hidden is bool and string,
- * bind is function and object,
- * callback is function and string
- */
 Ext.define('pmg-ldap-config', {
     extend: 'Ext.data.Model',
-    fields: [ 'profile', 'server1', 'server2', 'comment',
+    fields: ['profile', 'server1', 'server2', 'comment',
              'mode', 'binddn', 'bindpw', 'basedn', 'groupbasedn',
              'filter', 'accountattr', 'mailattr',
-             { name: 'port',  type: 'integer' },
-             { name: 'gcount',  type: 'integer' },
-             { name: 'mcount',  type: 'integer' },
-             { name: 'ucount',  type: 'integer' },
-             { name: 'disable',  type: 'boolean' }
+             { name: 'port', type: 'integer' },
+             { name: 'gcount', type: 'integer' },
+             { name: 'mcount', type: 'integer' },
+             { name: 'ucount', type: 'integer' },
+             { name: 'disable', type: 'boolean' },
            ],
     proxy: {
         type: 'proxmox',
-       url: "/api2/json/config/ldap"
+       url: "/api2/json/config/ldap",
     },
-    idProperty: 'profile'
+    idProperty: 'profile',
 });
 
 Ext.define('PMG.LDAPInputPanel', {
@@ -36,10 +28,15 @@ Ext.define('PMG.LDAPInputPanel', {
        values.disable = values.enable ? 0 : 1;
        delete values.enable;
 
+       // do not send empty password
+       if (values.bindpw === '') {
+           delete values.bindpw;
+       }
+
        return values;
     },
 
-    initComponent : function() {
+    initComponent: function() {
        var me = this;
 
        me.column1 = [
@@ -49,55 +46,72 @@ Ext.define('PMG.LDAPInputPanel', {
                value: me.profileId || '',
                name: 'profile',
                vtype: 'StorageId',
-               allowBlank: false
+               allowBlank: false,
            },
            {
                xtype: 'proxmoxKVComboBox',
                name: 'mode',
                comboItems: [
                    ['ldap', PMG.Utils.format_ldap_protocol('ldap')],
-                   ['ldaps', PMG.Utils.format_ldap_protocol('ldaps')]
+                   ['ldaps', PMG.Utils.format_ldap_protocol('ldaps')],
+                   ['ldap+starttls', PMG.Utils.format_ldap_protocol('ldap+starttls')],
                ],
                value: 'ldap',
-               fieldLabel: gettext('Protocol')
+               fieldLabel: gettext('Protocol'),
+               listeners: {
+                   change: function(cb, value) {
+                       var isldap = value === 'ldap';
+                       me.down('field[name=verify]').setVisible(!isldap);
+                   },
+               },
+           },
+           {
+               xtype: 'proxmoxcheckbox',
+               name: 'verify',
+               fieldLabel: gettext('Verify Certificate'),
+               hidden: true,
+               uncheckedValue: 0,
+               value: 1,
+               checked: 1,
            },
            {
                xtype: 'textfield',
                fieldLabel: gettext('Server'),
                allowBlank: false,
-               vtype: 'IP64Address',
-               name: 'server1'
+               vtype: 'DnsOrIp',
+               name: 'server1',
            },
            {
                xtype: 'proxmoxtextfield',
                fieldLabel: gettext('Server'),
                allowBlank: true,
-               deleteEmpty: me.isCreate ? false : true,
-               vtype: 'IP64Address',
-               name: 'server2'
+               deleteEmpty: !me.isCreate,
+               vtype: 'DnsOrIp',
+               name: 'server2',
            },
            {
                xtype: 'proxmoxintegerfield',
                name: 'port',
                emptyText: gettext('Default'),
-               deleteEmpty: me.isCreate ? false : true,
+               deleteEmpty: !me.isCreate,
                minValue: 1,
                maxValue: 65535,
-               fieldLabel: gettext('Port')
+               fieldLabel: gettext('Port'),
            },
            {
                xtype: 'textfield',
                name: 'binddn',
                allowBlank: true,
-               fieldLabel: gettext('User name')
+               fieldLabel: gettext('User name'),
            },
            {
                xtype: 'textfield',
                inputType: 'password',
                allowBlank: true,
+               emptyText: gettext('Unchanged'),
                name: 'bindpw',
-               fieldLabel: gettext('Password')
-           }
+               fieldLabel: gettext('Password'),
+           },
        ];
 
        me.column2 = [
@@ -106,50 +120,50 @@ Ext.define('PMG.LDAPInputPanel', {
                name: 'enable',
                checked: true,
                uncheckedValue: 0,
-               fieldLabel: gettext('Enable')
+               fieldLabel: gettext('Enable'),
            },
            {
                xtype: 'proxmoxtextfield',
                allowBlank: true,
-               deleteEmpty: me.isCreate ? false : true,
+               deleteEmpty: !me.isCreate,
                name: 'basedn',
-               fieldLabel: gettext('Base DN')
+               fieldLabel: gettext('Base DN'),
            },
            {
                xtype: 'proxmoxtextfield',
                allowBlank: true,
-               deleteEmpty: me.isCreate ? false : true,
+               deleteEmpty: !me.isCreate,
                name: 'groupbasedn',
-               fieldLabel: gettext('Base DN for Groups')
+               fieldLabel: gettext('Base DN for Groups'),
            },
            {
                xtype: 'proxmoxtextfield',
                allowBlank: true,
-               deleteEmpty: me.isCreate ? false : true,
+               deleteEmpty: !me.isCreate,
                name: 'mailattr',
-               fieldLabel: gettext('EMail attribute name(s)')
+               fieldLabel: gettext('EMail attribute name(s)'),
            },
            {
                xtype: 'proxmoxtextfield',
                allowBlank: true,
-               deleteEmpty: me.isCreate ? false : true,
+               deleteEmpty: !me.isCreate,
                name: 'accountattr',
-               fieldLabel: gettext('Account attribute name')
+               fieldLabel: gettext('Account attribute name'),
            },
            {
                xtype: 'proxmoxtextfield',
                allowBlank: true,
-               deleteEmpty: me.isCreate ? false : true,
+               deleteEmpty: !me.isCreate,
                name: 'filter',
-               fieldLabel: gettext('LDAP filter')
+               fieldLabel: gettext('LDAP filter'),
            },
            {
                xtype: 'proxmoxtextfield',
                allowBlank: true,
-               deleteEmpty: me.isCreate ? false : true,
+               deleteEmpty: !me.isCreate,
                name: 'groupclass',
-               fieldLabel: gettext('Group objectclass')
-           }
+               fieldLabel: gettext('Group objectclass'),
+           },
        ];
 
        me.columnB = [
@@ -157,25 +171,26 @@ Ext.define('PMG.LDAPInputPanel', {
                xtype: 'textfield',
                fieldLabel: gettext('Comment'),
                allowBlank: true,
-               name: 'comment'
-           }
+               name: 'comment',
+           },
        ];
 
        me.callParent();
-    }
+    },
 });
 
 Ext.define('PMG.LDAPEdit', {
     extend: 'Proxmox.window.Edit',
     alias: 'widget.pmgLDAPEdit',
+    onlineHelp: 'pmgconfig_ldap',
 
     subject: 'LDAP Profile',
     isAdd: true,
 
-    initComponent : function() {
+    initComponent: function() {
        var me = this;
 
-       me.isCreate = me.profileId ? false : true;
+       me.isCreate = !me.profileId;
 
        if (me.isCreate) {
             me.url = '/api2/extjs/config/ldap';
@@ -187,28 +202,29 @@ Ext.define('PMG.LDAPEdit', {
 
        var ipanel = Ext.create('PMG.LDAPInputPanel', {
            isCreate: me.isCreate,
-           profileId: me.profileId
+           profileId: me.profileId,
        });
 
-       me.items = [ ipanel ];
+       me.items = [ipanel];
 
        me.fieldDefaults = {
-           labelWidth: 150
+           labelWidth: 150,
        };
 
        me.callParent();
 
        if (!me.isCreate) {
            me.load({
-               success:  function(response, options) {
+               success: function(response, options) {
                    var values = response.result.data;
 
                    values.enable = values.disable ? 0 : 1;
+                   values.verify = !!values.verify;
                    ipanel.setValues(values);
-               }
+               },
            });
        }
-    }
+    },
 });
 
 Ext.define('PMG.LDAPUserGrid', {
@@ -218,26 +234,26 @@ Ext.define('PMG.LDAPUserGrid', {
     emptyText: gettext('No data in database'),
     store: {
        autoDestroy: true,
-       fields: [ 'dn', 'account', 'pmail' ],
+       fields: ['dn', 'account', 'pmail'],
        proxy: { type: 'proxmox' },
-       sorters: [ 'dn' ]
+       sorters: ['dn'],
     },
     columns: [
        {
            text: 'DN',
            dataIndex: 'dn',
-           flex: 1
+           flex: 1,
        },
        {
            text: gettext('Account'),
            dataIndex: 'account',
-           flex: 1
+           flex: 1,
        },
        {
            text: gettext('Primary E-Mail'),
            dataIndex: 'pmail',
-           flex: 1
-       }
+           flex: 1,
+       },
     ],
 
     initComponent: function() {
@@ -247,7 +263,7 @@ Ext.define('PMG.LDAPUserGrid', {
            me.getStore().getProxy().setUrl(me.url);
            me.getStore().load();
        }
-    }
+    },
 });
 
 Ext.define('PMG.LDAPConfig', {
@@ -268,8 +284,8 @@ Ext.define('PMG.LDAPConfig', {
                items: [{
                    xtype: 'pmgLDAPUserGrid',
                    border: false,
-                   url: '/api2/json/config/ldap/' + name + '/groups/' +  record.data.gid
-               }]
+                   url: '/api2/json/config/ldap/' + name + '/groups/' + encodeURIComponent(record.data.gid),
+               }],
            }).show();
        },
 
@@ -296,13 +312,13 @@ Ext.define('PMG.LDAPConfig', {
                        field: ['email', 'primary'],
                        proxy: {
                            type: 'proxmox',
-                           url: '/api2/json/config/ldap/' + name + '/users/' +  record.data.pmail
-                       }
+                           url: '/api2/json/config/ldap/' + name + '/users/' + encodeURIComponent(record.data.pmail),
+                       },
                    },
                    columns: [
-                       { dataIndex: 'email', text: gettext('E-Mail address'), flex: 1 }
-                   ]
-               }]
+                       { dataIndex: 'email', text: gettext('E-Mail address'), flex: 1 },
+                   ],
+               }],
            }).show();
        },
 
@@ -352,22 +368,22 @@ Ext.define('PMG.LDAPConfig', {
        control: {
            'grid[reference=grid]': {
                selectionchange: 'showInfo',
-               load: 'reload'
+               load: 'reload',
            },
            'grid[reference=groupgrid]': {
-               itemdblclick: 'openUserList'
+               itemdblclick: 'openUserList',
            },
            'grid[reference=usergrid]': {
-               itemdblclick: 'openUserMails'
-           }
-       }
+               itemdblclick: 'openUserMails',
+           },
+       },
     },
 
     viewModel: {
        data: {
            name: '',
-           selected: false
-       }
+           selected: false,
+       },
     },
 
     layout: 'border',
@@ -377,7 +393,7 @@ Ext.define('PMG.LDAPConfig', {
            region: 'center',
            reference: 'grid',
            xtype: 'pmgLDAPConfigGrid',
-           border: false
+           border: false,
        },
        {
            xtype: 'tabpanel',
@@ -388,7 +404,7 @@ Ext.define('PMG.LDAPConfig', {
            split: true,
            region: 'south',
            bind: {
-               hidden: '{!selected}'
+               hidden: '{!selected}',
            },
            items: [
                {
@@ -400,23 +416,23 @@ Ext.define('PMG.LDAPConfig', {
                        xtype: 'proxmoxButton',
                        text: gettext('Show Users'),
                        handler: 'showUsers',
-                       disabled: true
+                       disabled: true,
                    }],
                    store: {
                        fields: ['dn', 'gid'],
                        proxy: { type: 'proxmox' },
-                       sorters: [ 'dn' ]
+                       sorters: ['dn'],
                    },
                    bind: {
-                       title: Ext.String.format(gettext("Groups of '{0}'"), '{name}')
+                       title: Ext.String.format(gettext("Groups of '{0}'"), '{name}'),
                    },
                    columns: [
                        {
                            text: 'DN',
                            dataIndex: 'dn',
-                           flex: 1
-                       }
-                   ]
+                           flex: 1,
+                       },
+                   ],
                },
                {
                    xtype: 'pmgLDAPUserGrid',
@@ -426,15 +442,15 @@ Ext.define('PMG.LDAPConfig', {
                        xtype: 'proxmoxButton',
                        text: gettext('Show E-Mail addresses'),
                        handler: 'showEmails',
-                       disabled: true
+                       disabled: true,
                    }],
                    bind: {
-                       title: Ext.String.format(gettext("Users of '{0}'"), '{name}')
-                   }
-               }
-           ]
-       }
-    ]
+                       title: Ext.String.format(gettext("Users of '{0}'"), '{name}'),
+                   },
+               },
+           ],
+       },
+    ],
 
 });
 
@@ -454,7 +470,7 @@ Ext.define('PMG.LDAPConfigGrid', {
            }
 
            var win = Ext.createWidget('pmgLDAPEdit', {
-               profileId: rec.data.profile
+               profileId: rec.data.profile,
            });
            win.on('destroy', me.reload, me);
            win.load();
@@ -470,9 +486,9 @@ Ext.define('PMG.LDAPConfigGrid', {
 
 
        reload: function() {
-           var me = this.getView();
-           me.getStore().load();
-           me.fireEvent('load', me);
+           let view = this.getView();
+           view.getStore().load();
+           view.fireEvent('load', view);
        },
 
        sync: function() {
@@ -486,24 +502,24 @@ Ext.define('PMG.LDAPConfigGrid', {
                callback: function() {
                    me.reload();
                },
-               failure: function (response, opts) {
+               failure: function(response, opts) {
                    Ext.Msg.alert(gettext('Error'), response.htmlStatus);
-               }
+               },
            });
        },
 
        init: function(view) {
            var me = this;
            Proxmox.Utils.monStoreErrors(view, view.getStore(), true);
-       }
+       },
     },
 
     store: {
        model: 'pmg-ldap-config',
        sorters: [{
            property: 'profile',
-           order: 'DESC'
-       }]
+           direction: 'ASC',
+       }],
     },
 
     tbar: [
@@ -511,16 +527,16 @@ Ext.define('PMG.LDAPConfigGrid', {
            xtype: 'proxmoxButton',
            text: gettext('Edit'),
            disabled: true,
-           handler: 'run_editor'
+           handler: 'run_editor',
        },
        {
            text: gettext('Create'),
-           handler: 'newProfile'
+           handler: 'newProfile',
        },
        {
            xtype: 'proxmoxStdRemoveButton',
            baseurl: '/config/ldap',
-           callback: 'reload'
+           callback: 'reload',
        },
        {
            xtype: 'proxmoxButton',
@@ -529,13 +545,13 @@ Ext.define('PMG.LDAPConfigGrid', {
                return !rec.data.disable;
            },
            disabled: true,
-           handler: 'sync'
-       }
+           handler: 'sync',
+       },
     ],
 
     listeners: {
        itemdblclick: 'run_editor',
-       activate: 'reload'
+       activate: 'reload',
     },
 
     columns: [
@@ -543,13 +559,13 @@ Ext.define('PMG.LDAPConfigGrid', {
            header: gettext('Profile Name'),
            sortable: true,
            width: 120,
-           dataIndex: 'profile'
+           dataIndex: 'profile',
        },
        {
            header: gettext('Protocol'),
            sortable: true,
            dataIndex: 'mode',
-           renderer: PMG.Utils.format_ldap_protocol
+           renderer: PMG.Utils.format_ldap_protocol,
        },
        {
            header: gettext('Server'),
@@ -560,40 +576,40 @@ Ext.define('PMG.LDAPConfigGrid', {
                    return value + '<br>' + rec.data.server2;
                }
                return value;
-           }
+           },
        },
        {
            header: gettext('Enabled'),
            width: 80,
            sortable: true,
            dataIndex: 'disable',
-           renderer: Proxmox.Utils.format_neg_boolean
+           renderer: Proxmox.Utils.format_neg_boolean,
        },
        {
            header: gettext('Comment'),
            sortable: false,
            renderer: Ext.String.htmlEncode,
            dataIndex: 'comment',
-           flex: 1
+           flex: 1,
        },
        {
            header: gettext('Accounts'),
            width: 80,
            sortable: true,
-           dataIndex: 'ucount'
+           dataIndex: 'ucount',
        },
        {
            header: gettext('Addresses'),
            width: 80,
            sortable: true,
-           dataIndex: 'mcount'
+           dataIndex: 'mcount',
        },
        {
            header: gettext('Groups'),
            width: 80,
            sortable: true,
-           dataIndex: 'gcount'
-       }
-    ]
+           dataIndex: 'gcount',
+       },
+    ],
 
 });