]> git.proxmox.com Git - proxmox-backup.git/commitdiff
www: add AuthidSelector
authorFabian Grünbichler <f.gruenbichler@proxmox.com>
Fri, 6 Nov 2020 12:01:56 +0000 (13:01 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Fri, 6 Nov 2020 12:06:16 +0000 (13:06 +0100)
similar to TokenSelector, but with different fields / mapping of data.

Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
www/Makefile
www/form/AuthidSelector.js [new file with mode: 0644]

index 9fd014b4111ef6a11fe265f3eb61e132be48037f..f8516a2367188eec2d7bfa4f155e6a10541a0358 100644 (file)
@@ -8,6 +8,7 @@ JSSRC=                                                  \
        Utils.js                                        \
        form/UserSelector.js                            \
        form/TokenSelector.js                           \
+       form/AuthidSelector.js                          \
        form/RemoteSelector.js                          \
        form/DataStoreSelector.js                       \
        form/CalendarEvent.js                           \
diff --git a/www/form/AuthidSelector.js b/www/form/AuthidSelector.js
new file mode 100644 (file)
index 0000000..8938983
--- /dev/null
@@ -0,0 +1,98 @@
+Ext.define('pbs-authids', {
+    extend: 'Ext.data.Model',
+    fields: [
+       'authid', 'comment', 'type',
+    ],
+    idProperty: 'authid',
+});
+
+Ext.define('PBS.form.AuthidSelector', {
+    extend: 'Proxmox.form.ComboGrid',
+    alias: 'widget.pbsAuthidSelector',
+
+    allowBlank: false,
+    autoSelect: false,
+    valueField: 'authid',
+    displayField: 'authid',
+
+    editable: true,
+    anyMatch: true,
+    forceSelection: true,
+
+    store: {
+       model: 'pbs-authids',
+       params: {
+           enabled: 1,
+       },
+       sorters: 'authid',
+    },
+
+    initComponent: function() {
+       let me = this;
+       me.userStore = Ext.create('Ext.data.Store', {
+           model: 'pbs-users-with-tokens',
+       });
+       me.userStore.on('load', this.onLoad, this);
+       me.userStore.load();
+
+       me.callParent();
+    },
+
+    onLoad: function(store, data, success) {
+       if (!success) return;
+
+       let authidStore = this.store;
+
+       let records = [];
+       Ext.Array.each(data, function(user) {
+       let u = {};
+       u.authid = user.data.userid;
+       u.comment = user.data.comment;
+       u.type = 'u';
+       records.push(u);
+       let tokens = user.data.tokens || [];
+       Ext.Array.each(tokens, function(token) {
+           let r = {};
+           r.authid = token.tokenid;
+           r.comment = token.comment;
+           r.type = 't';
+           records.push(r);
+       });
+       });
+
+       authidStore.loadData(records);
+    },
+
+    listConfig: {
+       columns: [
+           {
+               header: gettext('Type'),
+               sortable: true,
+               dataIndex: 'type',
+               renderer: function(value) {
+                   switch (value) {
+                       case 'u': return gettext('User');
+                       case 't': return gettext('API Token');
+                       default: return Proxmox.Utils.unknownText;
+                   }
+               },
+               flex: 1,
+           },
+           {
+               header: gettext('Auth ID'),
+               sortable: true,
+               dataIndex: 'authid',
+               renderer: Ext.String.htmlEncode,
+               flex: 1,
+           },
+           {
+               header: gettext('Comment'),
+               sortable: false,
+               dataIndex: 'comment',
+               renderer: Ext.String.htmlEncode,
+               flex: 1,
+           },
+       ],
+    },
+});
+