]> git.proxmox.com Git - pve-manager.git/commitdiff
ui: dc/Auth*: refactor AuthEdit
authorDominik Csapak <d.csapak@proxmox.com>
Thu, 9 Apr 2020 14:10:45 +0000 (16:10 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Sun, 26 Apr 2020 11:07:54 +0000 (13:07 +0200)
similar to storage/Base.js so that we have the different
RealmTypes in different inputpanels

this will come in handy when we define sync options

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
www/manager6/Makefile
www/manager6/Utils.js
www/manager6/dc/AuthEdit.js [deleted file]
www/manager6/dc/AuthEditAD.js [new file with mode: 0644]
www/manager6/dc/AuthEditBase.js [new file with mode: 0644]
www/manager6/dc/AuthEditLDAP.js [new file with mode: 0644]
www/manager6/dc/AuthView.js

index 241a7bdb496495abf0348185272680633c5285f0..057a421138ad28f214e6f37063ab7c1f1795e9e1 100644 (file)
@@ -233,7 +233,9 @@ JSSRC=                                                      \
        dc/RoleEdit.js                                  \
        dc/ACLView.js                                   \
        dc/AuthView.js                                  \
-       dc/AuthEdit.js                                  \
+       dc/AuthEditBase.js                              \
+       dc/AuthEditAD.js                                \
+       dc/AuthEditLDAP.js                              \
        dc/Backup.js                                    \
        dc/Support.js                                   \
        dc/SecurityGroups.js                            \
index 1fe1e15e37f4fd0ef1ed9a62df543b2ce5b4e1f0..59db6d93dc47ff656a831bce20cc46e8d4ff2c5b 100644 (file)
@@ -566,6 +566,29 @@ Ext.define('PVE.Utils', { utilities: {
        return format === 'pbs-ct' || volid.match(':backup/vzdump-(lxc|openvz)-');
     },
 
+    authSchema: {
+       ad: {
+           name: gettext('Active Directory Server'),
+           ipanel: 'pveAuthADPanel',
+           add: true,
+       },
+       ldap: {
+           name: gettext('LDAP Server'),
+           ipanel: 'pveAuthLDAPPanel',
+           add: true,
+       },
+       pam: {
+           name: 'Linux PAM',
+           ipanel: 'pveAuthBasePanel',
+           add: false,
+       },
+       pve: {
+           name: 'Proxmox VE authentication server',
+           ipanel: 'pveAuthBasePanel',
+           add: false,
+       },
+    },
+
     storageSchema: {
        dir: {
            name: Proxmox.Utils.directoryText,
diff --git a/www/manager6/dc/AuthEdit.js b/www/manager6/dc/AuthEdit.js
deleted file mode 100644 (file)
index 1a62e55..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-Ext.define('PVE.dc.AuthEdit', {
-    extend: 'Proxmox.window.Edit',
-    alias: ['widget.pveDcAuthEdit'],
-
-    isAdd: true,
-
-    initComponent : function() {
-        var me = this;
-
-        me.isCreate = !me.realm;
-
-        var url;
-        var method;
-        var serverlist;
-
-        if (me.isCreate) {
-            url = '/api2/extjs/access/domains';
-            method = 'POST';
-        } else {
-            url = '/api2/extjs/access/domains/' + me.realm;
-            method = 'PUT';
-        }
-
-        var column1 = [
-            {
-                xtype: me.isCreate ? 'textfield' : 'displayfield',
-                name: 'realm',
-                fieldLabel: gettext('Realm'),
-                value: me.realm,
-                allowBlank: false
-            }
-       ];
-
-       if (me.authType === 'ad') {
-
-           me.subject = gettext('Active Directory Server');
-
-            column1.push({
-                xtype: 'textfield',
-                name: 'domain',
-                fieldLabel: gettext('Domain'),
-                emptyText: 'company.net',
-                allowBlank: false
-            });
-
-       } else if (me.authType === 'ldap') {
-
-           me.subject = gettext('LDAP Server');
-
-            column1.push({
-                xtype: 'textfield',
-                name: 'base_dn',
-                fieldLabel: gettext('Base Domain Name'),
-               emptyText: 'CN=Users,DC=Company,DC=net',
-                allowBlank: false
-            });
-
-            column1.push({
-                xtype: 'textfield',
-                name: 'user_attr',
-                emptyText: 'uid / sAMAccountName',
-                fieldLabel: gettext('User Attribute Name'),
-                allowBlank: false
-            });
-       } else if (me.authType === 'pve') {
-
-           if (me.isCreate) {
-               throw 'unknown auth type';
-           }
-
-           me.subject = 'Proxmox VE authentication server';
-
-       } else if (me.authType === 'pam') {
-
-           if (me.isCreate) {
-               throw 'unknown auth type';
-           }
-
-           me.subject = 'linux PAM';
-
-       } else {
-           throw 'unknown auth type ';
-       }
-
-        column1.push({
-            xtype: 'proxmoxcheckbox',
-            fieldLabel: gettext('Default'),
-            name: 'default',
-            uncheckedValue: 0
-        });
-
-        var column2 = [];
-
-       if (me.authType === 'ldap' || me.authType === 'ad') {
-           column2.push(
-               {
-                    xtype: 'textfield',
-                    fieldLabel: gettext('Server'),
-                    name: 'server1',
-                    allowBlank: false
-               },
-               {
-                    xtype: 'proxmoxtextfield',
-                    fieldLabel: gettext('Fallback Server'),
-                   deleteEmpty: !me.isCreate,
-                   name: 'server2'
-               },
-               {
-                    xtype: 'proxmoxintegerfield',
-                    name: 'port',
-                    fieldLabel: gettext('Port'),
-                    minValue: 1,
-                    maxValue: 65535,
-                   emptyText: gettext('Default'),
-                   submitEmptyText: false
-               },
-               {
-                    xtype: 'proxmoxcheckbox',
-                    fieldLabel: 'SSL',
-                    name: 'secure',
-                    uncheckedValue: 0
-               }
-            );
-       }
-
-       column2.push({
-           xtype: 'pveTFASelector',
-       });
-
-       var ipanel = Ext.create('Proxmox.panel.InputPanel', {
-           column1: column1,
-           column2: column2,
-           columnB: [{
-               xtype: 'textfield',
-               name: 'comment',
-               fieldLabel: gettext('Comment')
-            }],
-           onGetValues: function(values) {
-               if (!values.port) {
-                   if (!me.isCreate) {
-                       Proxmox.Utils.assemble_field_data(values, { 'delete': 'port' });
-                   }
-                   delete values.port;
-               }
-
-               if (me.isCreate) {
-                   values.type = me.authType;
-               }
-
-               return values;
-           }
-       });
-
-       Ext.applyIf(me, {
-            url: url,
-            method: method,
-           fieldDefaults: {
-               labelWidth: 120
-           },
-           items: [ ipanel ]
-        });
-
-        me.callParent();
-
-        if (!me.isCreate) {
-            me.load({
-                success: function(response, options) {
-                   var data = response.result.data || {};
-                   // just to be sure (should not happen)
-                   if (data.type !== me.authType) {
-                       me.close();
-                       throw "got wrong auth type";
-                   }
-
-                    me.setValues(data);
-                }
-            });
-        }
-    }
-});
diff --git a/www/manager6/dc/AuthEditAD.js b/www/manager6/dc/AuthEditAD.js
new file mode 100644 (file)
index 0000000..31a6a36
--- /dev/null
@@ -0,0 +1,54 @@
+Ext.define('PVE.panel.ADInputPanel', {
+    extend: 'PVE.panel.AuthBase',
+    xtype: 'pveAuthADPanel',
+
+    initComponent: function() {
+       let me = this;
+
+       if (me.type !== 'ad') {
+           throw 'invalid type';
+       }
+
+       me.column1 = [
+           {
+               xtype: 'textfield',
+               name: 'domain',
+               fieldLabel: gettext('Domain'),
+               emptyText: 'company.net',
+               allowBlank: false,
+           },
+       ];
+
+       me.column2 = [
+           {
+               xtype: 'textfield',
+               fieldLabel: gettext('Server'),
+               name: 'server1',
+               allowBlank: false,
+           },
+           {
+               xtype: 'proxmoxtextfield',
+               fieldLabel: gettext('Fallback Server'),
+               deleteEmpty: !me.isCreate,
+               name: 'server2',
+           },
+           {
+               xtype: 'proxmoxintegerfield',
+               name: 'port',
+               fieldLabel: gettext('Port'),
+               minValue: 1,
+               maxValue: 65535,
+               emptyText: gettext('Default'),
+               submitEmptyText: false,
+           },
+           {
+               xtype: 'proxmoxcheckbox',
+               fieldLabel: 'SSL',
+               name: 'secure',
+               uncheckedValue: 0,
+           },
+       ];
+
+       me.callParent();
+    },
+});
diff --git a/www/manager6/dc/AuthEditBase.js b/www/manager6/dc/AuthEditBase.js
new file mode 100644 (file)
index 0000000..5c4b6a9
--- /dev/null
@@ -0,0 +1,120 @@
+Ext.define('PVE.panel.AuthBase', {
+    extend: 'Proxmox.panel.InputPanel',
+    xtype: 'pveAuthBasePanel',
+
+    type: '',
+
+    onGetValues: function(values) {
+       let me = this;
+
+       if (!values.port) {
+           if (!me.isCreate) {
+               Proxmox.Utils.assemble_field_data(values, { 'delete': 'port' });
+           }
+           delete values.port;
+       }
+
+       if (me.isCreate) {
+           values.type = me.authType;
+       }
+
+       return values;
+    },
+
+    initComponent: function() {
+       let me = this;
+
+       if (!me.column1) { me.column1 = []; }
+       if (!me.column2) { me.column2 = []; }
+       if (!me.columnB) { me.columnB = []; }
+
+       // first field is name
+       me.column1.unshift({
+           xtype: me.isCreate ? 'textfield' : 'displayfield',
+           name: 'realm',
+           fieldLabel: gettext('Realm'),
+           value: me.realm,
+           allowBlank: false,
+       });
+
+       // last field is default'
+       me.column1.push({
+           xtype: 'proxmoxcheckbox',
+           fieldLabel: gettext('Default'),
+           name: 'default',
+           uncheckedValue: 0,
+       });
+
+       // last field of column2is tfa
+       me.column2.push({
+           xtype: 'pveTFASelector',
+       });
+
+       me.columnB.push({
+           xtype: 'textfield',
+           name: 'comment',
+           fieldLabel: gettext('Comment'),
+       });
+
+       me.callParent();
+    },
+});
+
+Ext.define('PVE.dc.AuthEditBase', {
+    extend: 'Proxmox.window.Edit',
+
+    isAdd: true,
+
+    fieldDefaults: {
+       labelWidth: 120,
+    },
+
+    initComponent: function() {
+       var me = this;
+
+       me.isCreate = !me.realm;
+
+       if (me.isCreate) {
+           me.url = '/api2/extjs/access/domains';
+           me.method = 'POST';
+       } else {
+           me.url = '/api2/extjs/access/domains/' + me.realm;
+           me.method = 'PUT';
+       }
+
+       let authConfig = PVE.Utils.authSchema[me.authType];
+       if (!authConfig) {
+           throw 'unknown auth type';
+       } else if (!authConfig.add && me.isCreate) {
+           throw 'trying to add non addable realm';
+       }
+
+       me.subject = authConfig.name;
+
+       Ext.apply(me, {
+           items: [{
+               realm: me.realm,
+               xtype: authConfig.ipanel,
+               isCreate: me.isCreate,
+               type: me.authType,
+           }],
+       });
+
+       me.callParent();
+
+       if (!me.isCreate) {
+           me.load({
+                   success: function(response, options) {
+                       var data = response.result.data || {};
+                       // just to be sure (should not happen)
+                       if (data.type !== me.authType) {
+                           me.close();
+                           throw "got wrong auth type";
+                       }
+
+                       me.setValues(data);
+                   },
+           });
+       }
+    },
+});
diff --git a/www/manager6/dc/AuthEditLDAP.js b/www/manager6/dc/AuthEditLDAP.js
new file mode 100644 (file)
index 0000000..3c32a37
--- /dev/null
@@ -0,0 +1,61 @@
+Ext.define('PVE.panel.LDAPInputPanel', {
+    extend: 'PVE.panel.AuthBase',
+    xtype: 'pveAuthLDAPPanel',
+
+    initComponent: function() {
+       let me = this;
+
+       if (me.type !== 'ldap') {
+           throw 'invalid type';
+       }
+
+       me.column1 = [
+           {
+               xtype: 'textfield',
+               name: 'base_dn',
+               fieldLabel: gettext('Base Domain Name'),
+               emptyText: 'CN=Users,DC=Company,DC=net',
+               allowBlank: false,
+           },
+           {
+               xtype: 'textfield',
+               name: 'user_attr',
+               emptyText: 'uid / sAMAccountName',
+               fieldLabel: gettext('User Attribute Name'),
+               allowBlank: false,
+           },
+       ];
+
+       me.column2 = [
+           {
+               xtype: 'textfield',
+               fieldLabel: gettext('Server'),
+               name: 'server1',
+               allowBlank: false,
+           },
+           {
+               xtype: 'proxmoxtextfield',
+               fieldLabel: gettext('Fallback Server'),
+               deleteEmpty: !me.isCreate,
+               name: 'server2',
+           },
+           {
+               xtype: 'proxmoxintegerfield',
+               name: 'port',
+               fieldLabel: gettext('Port'),
+               minValue: 1,
+               maxValue: 65535,
+               emptyText: gettext('Default'),
+               submitEmptyText: false,
+           },
+           {
+               xtype: 'proxmoxcheckbox',
+               fieldLabel: 'SSL',
+               name: 'secure',
+               uncheckedValue: 0,
+           },
+       ];
+
+       me.callParent();
+    },
+});
index 841b2c06c28363d2a837bc43586638e17e23375f..94ed0e133f44b1a5c6c7c4be618a3b2585f98d8f 100644 (file)
@@ -30,13 +30,13 @@ Ext.define('PVE.dc.AuthView', {
            if (!rec) {
                return;
            }
-
-            var win = Ext.create('PVE.dc.AuthEdit',{
-                realm: rec.data.realm,
-               authType: rec.data.type
-            });
-            win.on('destroy', reload);
-            win.show();
+           Ext.create('PVE.dc.AuthEditBase', {
+               realm: rec.data.realm,
+               authType: rec.data.type,
+               listeners: {
+                   destroy: reload,
+               },
+           }).show();
        };
 
        var edit_btn = new Proxmox.button.Button({
@@ -57,33 +57,29 @@ Ext.define('PVE.dc.AuthView', {
            }
         });
 
+       let items = [];
+       for (const [authType, config] of Object.entries(PVE.Utils.authSchema)) {
+           if (!config.add) { continue; }
+
+           items.push({
+               text: config.name,
+               handler: function() {
+                   Ext.create('PVE.dc.AuthEditBase', {
+                       authType,
+                       listeners: {
+                           destroy: reload,
+                       },
+                   }).show();
+               },
+           });
+       }
+
         var tbar = [
            {
                text: gettext('Add'),
                menu: new Ext.menu.Menu({
-                   items: [
-                       {
-                           text: gettext('Active Directory Server'),
-                           handler: function() {
-                               var win = Ext.create('PVE.dc.AuthEdit', {
-                                   authType: 'ad'
-                               });
-                               win.on('destroy', reload);
-                               win.show();
-                           }
-                       },
-                       {
-                           text: gettext('LDAP Server'),
-                           handler: function() {
-                               var win = Ext.create('PVE.dc.AuthEdit',{
-                                   authType: 'ldap'
-                               });
-                               win.on('destroy', reload);
-                               win.show();
-                           }
-                       }
-                   ]
-               })
+                   items: items,
+               }),
            },
            edit_btn, remove_btn
         ];