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