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();
- }
+ },
});