]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/dc/UserView.js
4d2238e32f46105fea544efc21e057b520ebd829
[pve-manager.git] / www / manager6 / dc / UserView.js
1 Ext.define('PVE.window.PasswordEdit', {
2 extend: 'PVE.window.Edit',
3
4 initComponent : function() {
5 var me = this;
6
7 if (!me.userid) {
8 throw "no userid specified";
9 }
10
11 var verifypw;
12 var pwfield;
13
14 var validate_pw = function() {
15 if (verifypw.getValue() !== pwfield.getValue()) {
16 return gettext("Passwords does not match");
17 }
18 return true;
19 };
20
21 verifypw = Ext.createWidget('textfield', {
22 inputType: 'password',
23 fieldLabel: gettext('Confirm password'),
24 name: 'verifypassword',
25 submitValue: false,
26 validator: validate_pw
27 });
28
29 pwfield = Ext.createWidget('textfield', {
30 inputType: 'password',
31 fieldLabel: gettext('Password'),
32 minLength: 5,
33 name: 'password',
34 validator: validate_pw
35 });
36
37 Ext.apply(me, {
38 subject: gettext('Password'),
39 url: '/api2/extjs/access/password',
40 items: [
41 pwfield, verifypw,
42 {
43 xtype: 'hiddenfield',
44 name: 'userid',
45 value: me.userid
46 }
47 ]
48 });
49
50 me.callParent();
51 }
52 });
53
54 Ext.define('PVE.dc.UserView', {
55 extend: 'Ext.grid.GridPanel',
56
57 alias: ['widget.pveUserView'],
58
59 onlineHelp: 'pveum_users',
60
61 stateful: true,
62 stateId: 'grid-users',
63
64 initComponent : function() {
65 var me = this;
66
67 var caps = Ext.state.Manager.get('GuiCap');
68
69 var store = new Ext.data.Store({
70 id: "users",
71 model: 'pve-users',
72 sorters: {
73 property: 'userid',
74 order: 'DESC'
75 }
76 });
77
78 var reload = function() {
79 store.load();
80 };
81
82 var sm = Ext.create('Ext.selection.RowModel', {});
83
84 var remove_btn = new PVE.button.Button({
85 text: gettext('Remove'),
86 disabled: true,
87 selModel: sm,
88 enableFn: function(rec) {
89 if (!caps.access['User.Modify']) {
90 return false;
91 }
92 return rec.data.userid !== 'root@pam';
93 },
94 confirmMsg: function (rec) {
95 return Ext.String.format(gettext('Are you sure you want to remove entry {0}'),
96 "'" + rec.data.userid + "'");
97 },
98 handler: function(btn, event, rec) {
99 var userid = rec.data.userid;
100
101 PVE.Utils.API2Request({
102 url: '/access/users/' + userid,
103 method: 'DELETE',
104 waitMsgTarget: me,
105 callback: function() {
106 reload();
107 },
108 failure: function (response, opts) {
109 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
110 }
111 });
112 }
113 });
114
115 var run_editor = function() {
116 var rec = sm.getSelection()[0];
117 if (!rec || !caps.access['User.Modify']) {
118 return;
119 }
120
121 var win = Ext.create('PVE.dc.UserEdit',{
122 userid: rec.data.userid
123 });
124 win.on('destroy', reload);
125 win.show();
126 };
127
128 var edit_btn = new PVE.button.Button({
129 text: gettext('Edit'),
130 disabled: true,
131 enableFn: function(rec) {
132 return !!caps.access['User.Modify'];
133 },
134 selModel: sm,
135 handler: run_editor
136 });
137
138 var pwchange_btn = new PVE.button.Button({
139 text: gettext('Password'),
140 disabled: true,
141 selModel: sm,
142 handler: function(btn, event, rec) {
143 var win = Ext.create('PVE.window.PasswordEdit',{
144 userid: rec.data.userid
145 });
146 win.on('destroy', reload);
147 win.show();
148 }
149 });
150
151 var tbar = [
152 {
153 text: gettext('Add'),
154 disabled: !caps.access['User.Modify'],
155 handler: function() {
156 var win = Ext.create('PVE.dc.UserEdit',{
157 });
158 win.on('destroy', reload);
159 win.show();
160 }
161 },
162 edit_btn, remove_btn, pwchange_btn
163 ];
164
165 var render_full_name = function(firstname, metaData, record) {
166
167 var first = firstname || '';
168 var last = record.data.lastname || '';
169 return first + " " + last;
170 };
171
172 var render_username = function(userid) {
173 return userid.match(/^(.+)(@[^@]+)$/)[1];
174 };
175
176 var render_realm = function(userid) {
177 return userid.match(/@([^@]+)$/)[1];
178 };
179
180 Ext.apply(me, {
181 store: store,
182 selModel: sm,
183 tbar: tbar,
184 viewConfig: {
185 trackOver: false
186 },
187 columns: [
188 {
189 header: gettext('User name'),
190 width: 200,
191 sortable: true,
192 renderer: render_username,
193 dataIndex: 'userid'
194 },
195 {
196 header: gettext('Realm'),
197 width: 100,
198 sortable: true,
199 renderer: render_realm,
200 dataIndex: 'userid'
201 },
202 {
203 header: gettext('Enabled'),
204 width: 80,
205 sortable: true,
206 renderer: PVE.Utils.format_boolean,
207 dataIndex: 'enable'
208 },
209 {
210 header: gettext('Expire'),
211 width: 80,
212 sortable: true,
213 renderer: PVE.Utils.format_expire,
214 dataIndex: 'expire'
215 },
216 {
217 header: gettext('Name'),
218 width: 150,
219 sortable: true,
220 renderer: render_full_name,
221 dataIndex: 'firstname'
222 },
223 {
224 header: gettext('Comment'),
225 sortable: false,
226 renderer: Ext.String.htmlEncode,
227 dataIndex: 'comment',
228 flex: 1
229 }
230 ],
231 listeners: {
232 activate: reload,
233 itemdblclick: run_editor
234 }
235 });
236
237 me.callParent();
238 }
239 });