]>
Commit | Line | Data |
---|---|---|
ee7a4dad DM |
1 | Ext.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, | |
60265958 DC |
61 | enableFn: function(record) { |
62 | if (record.data.realmtype) { | |
63 | let type = record.data.realmtype; | |
64 | if (PVE.Utils.authSchema[type]) { | |
65 | return !!PVE.Utils.authSchema[type].pwchange; | |
66 | } | |
67 | } | |
68 | return false; | |
69 | }, | |
ee7a4dad | 70 | handler: function(btn, event, rec) { |
42d48022 TL |
71 | Ext.create('Proxmox.window.PasswordEdit', { |
72 | userid: rec.data.userid, | |
73 | autoShow: true, | |
74 | listeners: { | |
75 | destroy: () => reload(), | |
76 | }, | |
ee7a4dad | 77 | }); |
f6710aac | 78 | }, |
ee7a4dad | 79 | }); |
42d48022 | 80 | let tfachange_btn = new Proxmox.button.Button({ |
31675561 | 81 | text: 'TFA', |
24d2ed8c WB |
82 | disabled: true, |
83 | selModel: sm, | |
e3393f6d DC |
84 | enableFn: function(record) { |
85 | if (record.data.realmtype) { | |
86 | let type = record.data.realmtype; | |
87 | if (PVE.Utils.authSchema[type]) { | |
88 | return !!PVE.Utils.authSchema[type].tfa; | |
89 | } | |
90 | } | |
91 | return false; | |
92 | }, | |
24d2ed8c | 93 | handler: function(btn, event, rec) { |
ca7f3b34 | 94 | var d = rec.data; |
ac3daab8 | 95 | var tfa_type = PVE.Parser.parseTfaType(d.keys); |
42d48022 | 96 | Ext.create('PVE.window.TFAEdit', { |
ac3daab8 | 97 | tfa_type: tfa_type, |
f6710aac | 98 | userid: d.userid, |
42d48022 TL |
99 | autoShow: true, |
100 | listeners: { | |
101 | destroy: () => reload(), | |
102 | }, | |
24d2ed8c | 103 | }); |
f6710aac | 104 | }, |
24d2ed8c WB |
105 | }); |
106 | ||
98d48570 FG |
107 | var perm_btn = new Proxmox.button.Button({ |
108 | text: gettext('Permissions'), | |
42d48022 | 109 | disabled: true, |
98d48570 FG |
110 | selModel: sm, |
111 | handler: function(btn, event, rec) { | |
42d48022 TL |
112 | Ext.create('PVE.dc.PermissionView', { |
113 | userid: rec.data.userid, | |
114 | autoShow: true, | |
115 | listeners: { | |
116 | destroy: () => reload(), | |
117 | }, | |
98d48570 | 118 | }); |
f6710aac | 119 | }, |
98d48570 FG |
120 | }); |
121 | ||
ee7a4dad DM |
122 | Ext.apply(me, { |
123 | store: store, | |
124 | selModel: sm, | |
42d48022 TL |
125 | tbar: [ |
126 | { | |
127 | text: gettext('Add'), | |
128 | disabled: !caps.access['User.Modify'], | |
129 | handler: function() { | |
130 | Ext.create('PVE.dc.UserEdit', { | |
131 | autoShow: true, | |
132 | listeners: { | |
133 | destroy: () => reload(), | |
134 | }, | |
135 | }); | |
136 | }, | |
137 | }, | |
138 | '-', | |
139 | edit_btn, | |
140 | remove_btn, | |
141 | '-', | |
142 | pwchange_btn, | |
143 | tfachange_btn, | |
144 | '-', | |
145 | perm_btn, | |
146 | ], | |
ee7a4dad | 147 | viewConfig: { |
f6710aac | 148 | trackOver: false, |
ee7a4dad DM |
149 | }, |
150 | columns: [ | |
151 | { | |
152 | header: gettext('User name'), | |
153 | width: 200, | |
154 | sortable: true, | |
42d48022 | 155 | renderer: userid => Ext.String.htmlEncode(userid.match(/^(.+)(@[^@]+)$/)[1]), |
f6710aac | 156 | dataIndex: 'userid', |
ee7a4dad DM |
157 | }, |
158 | { | |
159 | header: gettext('Realm'), | |
160 | width: 100, | |
161 | sortable: true, | |
42d48022 | 162 | renderer: userid => Ext.String.htmlEncode(userid.match(/@([^@]+)$/)[1]), |
f6710aac | 163 | dataIndex: 'userid', |
ee7a4dad DM |
164 | }, |
165 | { | |
166 | header: gettext('Enabled'), | |
167 | width: 80, | |
168 | sortable: true, | |
e7ade592 | 169 | renderer: Proxmox.Utils.format_boolean, |
f6710aac | 170 | dataIndex: 'enable', |
ee7a4dad DM |
171 | }, |
172 | { | |
173 | header: gettext('Expire'), | |
174 | width: 80, | |
175 | sortable: true, | |
2a4971d8 | 176 | renderer: Proxmox.Utils.format_expire, |
f6710aac | 177 | dataIndex: 'expire', |
ee7a4dad DM |
178 | }, |
179 | { | |
180 | header: gettext('Name'), | |
181 | width: 150, | |
182 | sortable: true, | |
6ad4be69 | 183 | renderer: PVE.Utils.render_full_name, |
f6710aac | 184 | dataIndex: 'firstname', |
ee7a4dad | 185 | }, |
bf0754fd TL |
186 | { |
187 | header: 'TFA', | |
188 | width: 50, | |
189 | sortable: true, | |
190 | renderer: function(v) { | |
42d48022 | 191 | let tfa_type = PVE.Parser.parseTfaType(v); |
da898810 WB |
192 | if (tfa_type === undefined) { |
193 | return Proxmox.Utils.noText; | |
194 | } else if (tfa_type === 1) { | |
195 | return Proxmox.Utils.yesText; | |
196 | } else { | |
197 | return tfa_type; | |
198 | } | |
bf0754fd | 199 | }, |
f6710aac | 200 | dataIndex: 'keys', |
bf0754fd | 201 | }, |
ee7a4dad | 202 | { |
ee7a4dad DM |
203 | header: gettext('Comment'), |
204 | sortable: false, | |
2eb0767b | 205 | renderer: Ext.String.htmlEncode, |
ee7a4dad | 206 | dataIndex: 'comment', |
f6710aac TL |
207 | flex: 1, |
208 | }, | |
ee7a4dad DM |
209 | ], |
210 | listeners: { | |
c0b3df6e | 211 | activate: reload, |
f6710aac TL |
212 | itemdblclick: run_editor, |
213 | }, | |
ee7a4dad DM |
214 | }); |
215 | ||
216 | me.callParent(); | |
f3c90a1d DC |
217 | |
218 | Proxmox.Utils.monStoreErrors(me, store); | |
f6710aac | 219 | }, |
ee7a4dad | 220 | }); |