]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/dc/UserView.js
ui: fix missing htmlEncodes
[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;
ac3daab8 88 var tfa_type = PVE.Parser.parseTfaType(d.keys);
24d2ed8c 89 var win = Ext.create('PVE.window.TFAEdit',{
ac3daab8
WB
90 tfa_type: tfa_type,
91 userid: d.userid
24d2ed8c
WB
92 });
93 win.on('destroy', reload);
94 win.show();
95 }
96 });
97
98d48570
FG
98 var perm_btn = new Proxmox.button.Button({
99 text: gettext('Permissions'),
100 disabled: false,
101 selModel: sm,
102 handler: function(btn, event, rec) {
103 var win = Ext.create('PVE.dc.PermissionView', {
104 userid: rec.data.userid
105 });
106 win.show();
107 }
108 });
109
ee7a4dad
DM
110 var tbar = [
111 {
112 text: gettext('Add'),
113 disabled: !caps.access['User.Modify'],
114 handler: function() {
115 var win = Ext.create('PVE.dc.UserEdit',{
116 });
117 win.on('destroy', reload);
118 win.show();
119 }
120 },
98d48570 121 edit_btn, remove_btn, pwchange_btn, tfachange_btn, perm_btn
ee7a4dad
DM
122 ];
123
ee7a4dad 124 var render_username = function(userid) {
1011b569 125 return Ext.String.htmlEncode(userid.match(/^(.+)(@[^@]+)$/)[1]);
ee7a4dad
DM
126 };
127
128 var render_realm = function(userid) {
1011b569 129 return Ext.String.htmlEncode(userid.match(/@([^@]+)$/)[1]);
ee7a4dad
DM
130 };
131
132 Ext.apply(me, {
133 store: store,
134 selModel: sm,
ee7a4dad
DM
135 tbar: tbar,
136 viewConfig: {
137 trackOver: false
138 },
139 columns: [
140 {
141 header: gettext('User name'),
142 width: 200,
143 sortable: true,
144 renderer: render_username,
145 dataIndex: 'userid'
146 },
147 {
148 header: gettext('Realm'),
149 width: 100,
150 sortable: true,
151 renderer: render_realm,
152 dataIndex: 'userid'
153 },
154 {
155 header: gettext('Enabled'),
156 width: 80,
157 sortable: true,
e7ade592 158 renderer: Proxmox.Utils.format_boolean,
ee7a4dad
DM
159 dataIndex: 'enable'
160 },
161 {
162 header: gettext('Expire'),
163 width: 80,
164 sortable: true,
e7ade592 165 renderer: Proxmox.Utils.format_expire,
ee7a4dad
DM
166 dataIndex: 'expire'
167 },
168 {
169 header: gettext('Name'),
170 width: 150,
171 sortable: true,
6ad4be69 172 renderer: PVE.Utils.render_full_name,
ee7a4dad
DM
173 dataIndex: 'firstname'
174 },
bf0754fd
TL
175 {
176 header: 'TFA',
177 width: 50,
178 sortable: true,
179 renderer: function(v) {
da898810
WB
180 var tfa_type = PVE.Parser.parseTfaType(v);
181 if (tfa_type === undefined) {
182 return Proxmox.Utils.noText;
183 } else if (tfa_type === 1) {
184 return Proxmox.Utils.yesText;
185 } else {
186 return tfa_type;
187 }
bf0754fd
TL
188 },
189 dataIndex: 'keys'
190 },
ee7a4dad 191 {
ee7a4dad
DM
192 header: gettext('Comment'),
193 sortable: false,
2eb0767b 194 renderer: Ext.String.htmlEncode,
ee7a4dad
DM
195 dataIndex: 'comment',
196 flex: 1
197 }
198 ],
199 listeners: {
c0b3df6e 200 activate: reload,
ee7a4dad
DM
201 itemdblclick: run_editor
202 }
203 });
204
205 me.callParent();
f3c90a1d
DC
206
207 Proxmox.Utils.monStoreErrors(me, store);
ee7a4dad
DM
208 }
209});