]> git.proxmox.com Git - pve-manager.git/blame - www/manager5/dc/UserView.js
copy dc/UserView.js from manager to manager5
[pve-manager.git] / www / manager5 / dc / UserView.js
CommitLineData
ee7a4dad
DM
1Ext.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
54Ext.define('PVE.dc.UserView', {
55 extend: 'Ext.grid.GridPanel',
56
57 alias: ['widget.pveUserView'],
58
59 initComponent : function() {
60 var me = this;
61
62 var caps = Ext.state.Manager.get('GuiCap');
63
64 var store = new Ext.data.Store({
65 id: "users",
66 model: 'pve-users',
67 sorters: {
68 property: 'userid',
69 order: 'DESC'
70 }
71 });
72
73 var reload = function() {
74 store.load();
75 };
76
77 var sm = Ext.create('Ext.selection.RowModel', {});
78
79 var remove_btn = new PVE.button.Button({
80 text: gettext('Remove'),
81 disabled: true,
82 selModel: sm,
83 enableFn: function(rec) {
84 if (!caps.access['User.Modify']) {
85 return false;
86 }
87 return rec.data.userid !== 'root@pam';
88 },
89 confirmMsg: function (rec) {
90 return Ext.String.format(gettext('Are you sure you want to remove entry {0}'),
91 "'" + rec.data.userid + "'");
92 },
93 handler: function(btn, event, rec) {
94 var userid = rec.data.userid;
95
96 PVE.Utils.API2Request({
97 url: '/access/users/' + userid,
98 method: 'DELETE',
99 waitMsgTarget: me,
100 callback: function() {
101 reload();
102 },
103 failure: function (response, opts) {
104 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
105 }
106 });
107 }
108 });
109
110 var run_editor = function() {
111 var rec = sm.getSelection()[0];
112 if (!rec || !caps.access['User.Modify']) {
113 return;
114 }
115
116 var win = Ext.create('PVE.dc.UserEdit',{
117 userid: rec.data.userid
118 });
119 win.on('destroy', reload);
120 win.show();
121 };
122
123 var edit_btn = new PVE.button.Button({
124 text: gettext('Edit'),
125 disabled: true,
126 enableFn: function(rec) {
127 return !!caps.access['User.Modify'];
128 },
129 selModel: sm,
130 handler: run_editor
131 });
132
133 var pwchange_btn = new PVE.button.Button({
134 text: gettext('Password'),
135 disabled: true,
136 selModel: sm,
137 handler: function(btn, event, rec) {
138 var win = Ext.create('PVE.window.PasswordEdit',{
139 userid: rec.data.userid
140 });
141 win.on('destroy', reload);
142 win.show();
143 }
144 });
145
146 var tbar = [
147 {
148 text: gettext('Add'),
149 disabled: !caps.access['User.Modify'],
150 handler: function() {
151 var win = Ext.create('PVE.dc.UserEdit',{
152 });
153 win.on('destroy', reload);
154 win.show();
155 }
156 },
157 edit_btn, remove_btn, pwchange_btn
158 ];
159
160 var render_full_name = function(firstname, metaData, record) {
161
162 var first = firstname || '';
163 var last = record.data.lastname || '';
164 return first + " " + last;
165 };
166
167 var render_username = function(userid) {
168 return userid.match(/^(.+)(@[^@]+)$/)[1];
169 };
170
171 var render_realm = function(userid) {
172 return userid.match(/@([^@]+)$/)[1];
173 };
174
175 Ext.apply(me, {
176 store: store,
177 selModel: sm,
178 stateful: false,
179 tbar: tbar,
180 viewConfig: {
181 trackOver: false
182 },
183 columns: [
184 {
185 header: gettext('User name'),
186 width: 200,
187 sortable: true,
188 renderer: render_username,
189 dataIndex: 'userid'
190 },
191 {
192 header: gettext('Realm'),
193 width: 100,
194 sortable: true,
195 renderer: render_realm,
196 dataIndex: 'userid'
197 },
198 {
199 header: gettext('Enabled'),
200 width: 80,
201 sortable: true,
202 renderer: PVE.Utils.format_boolean,
203 dataIndex: 'enable'
204 },
205 {
206 header: gettext('Expire'),
207 width: 80,
208 sortable: true,
209 renderer: PVE.Utils.format_expire,
210 dataIndex: 'expire'
211 },
212 {
213 header: gettext('Name'),
214 width: 150,
215 sortable: true,
216 renderer: render_full_name,
217 dataIndex: 'firstname'
218 },
219 {
220 id: 'comment',
221 header: gettext('Comment'),
222 sortable: false,
223 dataIndex: 'comment',
224 flex: 1
225 }
226 ],
227 listeners: {
228 show: reload,
229 itemdblclick: run_editor
230 }
231 });
232
233 me.callParent();
234 }
235});