]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/dc/UserView.js
ui: dc/UserView: disable TFA button based on realm type
[pve-manager.git] / www / manager6 / dc / UserView.js
CommitLineData
ee7a4dad
DM
1Ext.define('PVE.dc.UserView', {
2 extend: 'Ext.grid.GridPanel',
3
4 alias: ['widget.pveUserView'],
5
ba93a9c6
DC
6 onlineHelp: 'pveum_users',
7
3ac2a964
DC
8 stateful: true,
9 stateId: 'grid-users',
10
8058410f 11 initComponent: function() {
ee7a4dad
DM
12 var me = this;
13
14 var caps = Ext.state.Manager.get('GuiCap');
15
16 var store = new Ext.data.Store({
17 id: "users",
18 model: 'pve-users',
2a4971d8
TL
19 sorters: {
20 property: 'userid',
f6710aac
TL
21 order: 'DESC',
22 },
ee7a4dad 23 });
42d48022 24 let reload = () => store.load();
ee7a4dad 25
42d48022 26 let sm = Ext.create('Ext.selection.RowModel', {});
ee7a4dad 27
42d48022 28 let remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
ee7a4dad 29 selModel: sm,
3b1ca3ff 30 baseurl: '/access/users/',
42a8a0b4 31 dangerous: true,
42d48022
TL
32 enableFn: rec => caps.access['User.Modify'] && rec.data.userid !== 'root@pam',
33 callback: () => reload(),
34 });
35 let run_editor = function() {
ee7a4dad
DM
36 var rec = sm.getSelection()[0];
37 if (!rec || !caps.access['User.Modify']) {
38 return;
39 }
42d48022
TL
40 Ext.create('PVE.dc.UserEdit', {
41 userid: rec.data.userid,
42 autoShow: true,
43 listeners: {
44 destroy: () => reload(),
45 },
46 });
ee7a4dad 47 };
42d48022 48 let edit_btn = new Proxmox.button.Button({
ee7a4dad
DM
49 text: gettext('Edit'),
50 disabled: true,
51 enableFn: function(rec) {
52 return !!caps.access['User.Modify'];
53 },
54 selModel: sm,
f6710aac 55 handler: run_editor,
ee7a4dad 56 });
42d48022 57 let pwchange_btn = new Proxmox.button.Button({
ee7a4dad
DM
58 text: gettext('Password'),
59 disabled: true,
60 selModel: sm,
61 handler: function(btn, event, rec) {
42d48022
TL
62 Ext.create('Proxmox.window.PasswordEdit', {
63 userid: rec.data.userid,
64 autoShow: true,
65 listeners: {
66 destroy: () => reload(),
67 },
ee7a4dad 68 });
f6710aac 69 },
ee7a4dad 70 });
42d48022 71 let tfachange_btn = new Proxmox.button.Button({
31675561 72 text: 'TFA',
24d2ed8c
WB
73 disabled: true,
74 selModel: sm,
e3393f6d
DC
75 enableFn: function(record) {
76 if (record.data.realmtype) {
77 let type = record.data.realmtype;
78 if (PVE.Utils.authSchema[type]) {
79 return !!PVE.Utils.authSchema[type].tfa;
80 }
81 }
82 return false;
83 },
24d2ed8c 84 handler: function(btn, event, rec) {
ca7f3b34 85 var d = rec.data;
ac3daab8 86 var tfa_type = PVE.Parser.parseTfaType(d.keys);
42d48022 87 Ext.create('PVE.window.TFAEdit', {
ac3daab8 88 tfa_type: tfa_type,
f6710aac 89 userid: d.userid,
42d48022
TL
90 autoShow: true,
91 listeners: {
92 destroy: () => reload(),
93 },
24d2ed8c 94 });
f6710aac 95 },
24d2ed8c
WB
96 });
97
98d48570
FG
98 var perm_btn = new Proxmox.button.Button({
99 text: gettext('Permissions'),
42d48022 100 disabled: true,
98d48570
FG
101 selModel: sm,
102 handler: function(btn, event, rec) {
42d48022
TL
103 Ext.create('PVE.dc.PermissionView', {
104 userid: rec.data.userid,
105 autoShow: true,
106 listeners: {
107 destroy: () => reload(),
108 },
98d48570 109 });
f6710aac 110 },
98d48570
FG
111 });
112
ee7a4dad
DM
113 Ext.apply(me, {
114 store: store,
115 selModel: sm,
42d48022
TL
116 tbar: [
117 {
118 text: gettext('Add'),
119 disabled: !caps.access['User.Modify'],
120 handler: function() {
121 Ext.create('PVE.dc.UserEdit', {
122 autoShow: true,
123 listeners: {
124 destroy: () => reload(),
125 },
126 });
127 },
128 },
129 '-',
130 edit_btn,
131 remove_btn,
132 '-',
133 pwchange_btn,
134 tfachange_btn,
135 '-',
136 perm_btn,
137 ],
ee7a4dad 138 viewConfig: {
f6710aac 139 trackOver: false,
ee7a4dad
DM
140 },
141 columns: [
142 {
143 header: gettext('User name'),
144 width: 200,
145 sortable: true,
42d48022 146 renderer: userid => Ext.String.htmlEncode(userid.match(/^(.+)(@[^@]+)$/)[1]),
f6710aac 147 dataIndex: 'userid',
ee7a4dad
DM
148 },
149 {
150 header: gettext('Realm'),
151 width: 100,
152 sortable: true,
42d48022 153 renderer: userid => Ext.String.htmlEncode(userid.match(/@([^@]+)$/)[1]),
f6710aac 154 dataIndex: 'userid',
ee7a4dad
DM
155 },
156 {
157 header: gettext('Enabled'),
158 width: 80,
159 sortable: true,
e7ade592 160 renderer: Proxmox.Utils.format_boolean,
f6710aac 161 dataIndex: 'enable',
ee7a4dad
DM
162 },
163 {
164 header: gettext('Expire'),
165 width: 80,
166 sortable: true,
2a4971d8 167 renderer: Proxmox.Utils.format_expire,
f6710aac 168 dataIndex: 'expire',
ee7a4dad
DM
169 },
170 {
171 header: gettext('Name'),
172 width: 150,
173 sortable: true,
6ad4be69 174 renderer: PVE.Utils.render_full_name,
f6710aac 175 dataIndex: 'firstname',
ee7a4dad 176 },
bf0754fd
TL
177 {
178 header: 'TFA',
179 width: 50,
180 sortable: true,
181 renderer: function(v) {
42d48022 182 let tfa_type = PVE.Parser.parseTfaType(v);
da898810
WB
183 if (tfa_type === undefined) {
184 return Proxmox.Utils.noText;
185 } else if (tfa_type === 1) {
186 return Proxmox.Utils.yesText;
187 } else {
188 return tfa_type;
189 }
bf0754fd 190 },
f6710aac 191 dataIndex: 'keys',
bf0754fd 192 },
ee7a4dad 193 {
ee7a4dad
DM
194 header: gettext('Comment'),
195 sortable: false,
2eb0767b 196 renderer: Ext.String.htmlEncode,
ee7a4dad 197 dataIndex: 'comment',
f6710aac
TL
198 flex: 1,
199 },
ee7a4dad
DM
200 ],
201 listeners: {
c0b3df6e 202 activate: reload,
f6710aac
TL
203 itemdblclick: run_editor,
204 },
ee7a4dad
DM
205 });
206
207 me.callParent();
f3c90a1d
DC
208
209 Proxmox.Utils.monStoreErrors(me, store);
f6710aac 210 },
ee7a4dad 211});