]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/dc/AuthView.js
ui: add PVE.form.ListField
[pve-manager.git] / www / manager6 / dc / AuthView.js
index 841b2c06c28363d2a837bc43586638e17e23375f..60332c3f3130761b5e216c2f9283406ae1e7a004 100644 (file)
@@ -8,126 +8,133 @@ Ext.define('PVE.dc.AuthView', {
     stateful: true,
     stateId: 'grid-authrealms',
 
-    initComponent : function() {
-       var me = this;
-
-       var store = new Ext.data.Store({
-           model: 'pve-domains',
-           sorters: { 
-               property: 'realm', 
-               order: 'DESC' 
-           }
-       });
+    viewConfig: {
+       trackOver: false,
+    },
 
-       var reload = function() {
-           store.load();
-       };
+    columns: [
+       {
+           header: gettext('Realm'),
+           width: 100,
+           sortable: true,
+           dataIndex: 'realm',
+       },
+       {
+           header: gettext('Type'),
+           width: 100,
+           sortable: true,
+           dataIndex: 'type',
+       },
+       {
+           header: gettext('TFA'),
+           width: 100,
+           sortable: true,
+           dataIndex: 'tfa',
+       },
+       {
+           header: gettext('Comment'),
+           sortable: false,
+           dataIndex: 'comment',
+           renderer: Ext.String.htmlEncode,
+           flex: 1,
+       },
+    ],
 
-       var sm = Ext.create('Ext.selection.RowModel', {});
+    store: {
+       model: 'pmx-domains',
+       sorters: {
+           property: 'realm',
+           direction: 'ASC',
+       },
+    },
 
-       var run_editor = function() {
-           var rec = sm.getSelection()[0];
-           if (!rec) {
-               return;
-           }
+    openEditWindow: function(authType, realm) {
+       let me = this;
+       Ext.create('PVE.dc.AuthEditBase', {
+           authType,
+           realm,
+           listeners: {
+               destroy: () => me.reload(),
+           },
+       }).show();
+    },
 
-            var win = Ext.create('PVE.dc.AuthEdit',{
-                realm: rec.data.realm,
-               authType: rec.data.type
-            });
-            win.on('destroy', reload);
-            win.show();
-       };
+    reload: function() {
+       let me = this;
+       me.getStore().load();
+    },
 
-       var edit_btn = new Proxmox.button.Button({
-           text: gettext('Edit'),
-           disabled: true,
-           selModel: sm,
-           handler: run_editor
-       });
+    run_editor: function() {
+       let me = this;
+       let rec = me.getSelection()[0];
+       if (!rec) {
+           return;
+       }
+       me.openEditWindow(rec.data.type, rec.data.realm);
+    },
 
-       var remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
-           baseurl: '/access/domains/',
-           selModel: sm,
-           enableFn: function(rec) {
-               return !(rec.data.type === 'pve' || rec.data.type === 'pam');
+    open_sync_window: function() {
+       let me = this;
+       let rec = me.getSelection()[0];
+       if (!rec) {
+           return;
+       }
+       Ext.create('PVE.dc.SyncWindow', {
+           realm: rec.data.realm,
+           listeners: {
+               destroy: () => me.reload(),
            },
-           callback: function() {
-               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();
-                           }
-                       }
-                   ]
-               })
-           },
-           edit_btn, remove_btn
-        ];
+    initComponent: function() {
+       var me = this;
+
+       let items = [];
+       for (const [authType, config] of Object.entries(PVE.Utils.authSchema)) {
+           if (!config.add) { continue; }
+           items.push({
+               text: config.name,
+               iconCls: 'fa fa-fw ' + (config.iconCls || 'fa-address-book-o'),
+               handler: () => me.openEditWindow(authType),
+           });
+       }
 
        Ext.apply(me, {
-           store: store,
-           selModel: sm,
-            tbar: tbar,
-           viewConfig: {
-               trackOver: false
-           },
-           columns: [
+           tbar: [
                {
-                   header: gettext('Realm'),
-                   width: 100,
-                   sortable: true,
-                   dataIndex: 'realm'
+                   text: gettext('Add'),
+                   menu: {
+                       items: items,
+                   },
                },
                {
-                   header: gettext('Type'),
-                   width: 100,
-                   sortable: true,
-                   dataIndex: 'type'
+                   xtype: 'proxmoxButton',
+                   text: gettext('Edit'),
+                   disabled: true,
+                   handler: () => me.run_editor(),
                },
                {
-                   header: gettext('TFA'),
-                   width: 100,
-                   sortable: true,
-                   dataIndex: 'tfa'
+                   xtype: 'proxmoxStdRemoveButton',
+                   baseurl: '/access/domains/',
+                   enableFn: (rec) => PVE.Utils.authSchema[rec.data.type].add,
+                   callback: () => me.reload(),
                },
+               '-',
                {
-                   header: gettext('Comment'),
-                   sortable: false,
-                   dataIndex: 'comment',
-                   renderer: Ext.String.htmlEncode,
-                   flex: 1
-               }
+                   xtype: 'proxmoxButton',
+                   text: gettext('Sync'),
+                   disabled: true,
+                   enableFn: (rec) => Boolean(PVE.Utils.authSchema[rec.data.type].syncipanel),
+                   handler: () => me.open_sync_window(),
+               },
            ],
            listeners: {
-               activate: reload,
-               itemdblclick: run_editor
-           }
+               activate: () => me.reload(),
+               itemdblclick: () => me.run_editor(),
+           },
        });
 
        me.callParent();
-    }
+    },
 });