]>
Commit | Line | Data |
---|---|---|
ee7a4dad DM |
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 | ||
ba93a9c6 DC |
59 | onlineHelp: 'pveum_users', |
60 | ||
3ac2a964 DC |
61 | stateful: true, |
62 | stateId: 'grid-users', | |
63 | ||
ee7a4dad DM |
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 | ||
3b1ca3ff | 84 | var remove_btn = Ext.create('Proxmox.button.StdRemoveButton', { |
ee7a4dad | 85 | selModel: sm, |
3b1ca3ff | 86 | baseurl: '/access/users/', |
ee7a4dad DM |
87 | enableFn: function(rec) { |
88 | if (!caps.access['User.Modify']) { | |
89 | return false; | |
90 | } | |
91 | return rec.data.userid !== 'root@pam'; | |
92 | }, | |
3b1ca3ff DC |
93 | callback: function() { |
94 | reload(); | |
ee7a4dad DM |
95 | } |
96 | }); | |
97 | ||
98 | var run_editor = function() { | |
99 | var rec = sm.getSelection()[0]; | |
100 | if (!rec || !caps.access['User.Modify']) { | |
101 | return; | |
102 | } | |
103 | ||
104 | var win = Ext.create('PVE.dc.UserEdit',{ | |
105 | userid: rec.data.userid | |
106 | }); | |
107 | win.on('destroy', reload); | |
108 | win.show(); | |
109 | }; | |
110 | ||
5720fafa | 111 | var edit_btn = new Proxmox.button.Button({ |
ee7a4dad DM |
112 | text: gettext('Edit'), |
113 | disabled: true, | |
114 | enableFn: function(rec) { | |
115 | return !!caps.access['User.Modify']; | |
116 | }, | |
117 | selModel: sm, | |
118 | handler: run_editor | |
119 | }); | |
120 | ||
5720fafa | 121 | var pwchange_btn = new Proxmox.button.Button({ |
ee7a4dad DM |
122 | text: gettext('Password'), |
123 | disabled: true, | |
124 | selModel: sm, | |
125 | handler: function(btn, event, rec) { | |
126 | var win = Ext.create('PVE.window.PasswordEdit',{ | |
127 | userid: rec.data.userid | |
128 | }); | |
129 | win.on('destroy', reload); | |
130 | win.show(); | |
131 | } | |
132 | }); | |
133 | ||
134 | var tbar = [ | |
135 | { | |
136 | text: gettext('Add'), | |
137 | disabled: !caps.access['User.Modify'], | |
138 | handler: function() { | |
139 | var win = Ext.create('PVE.dc.UserEdit',{ | |
140 | }); | |
141 | win.on('destroy', reload); | |
142 | win.show(); | |
143 | } | |
144 | }, | |
145 | edit_btn, remove_btn, pwchange_btn | |
146 | ]; | |
147 | ||
148 | var render_full_name = function(firstname, metaData, record) { | |
149 | ||
150 | var first = firstname || ''; | |
151 | var last = record.data.lastname || ''; | |
152 | return first + " " + last; | |
153 | }; | |
154 | ||
155 | var render_username = function(userid) { | |
156 | return userid.match(/^(.+)(@[^@]+)$/)[1]; | |
157 | }; | |
158 | ||
159 | var render_realm = function(userid) { | |
160 | return userid.match(/@([^@]+)$/)[1]; | |
161 | }; | |
162 | ||
163 | Ext.apply(me, { | |
164 | store: store, | |
165 | selModel: sm, | |
ee7a4dad DM |
166 | tbar: tbar, |
167 | viewConfig: { | |
168 | trackOver: false | |
169 | }, | |
170 | columns: [ | |
171 | { | |
172 | header: gettext('User name'), | |
173 | width: 200, | |
174 | sortable: true, | |
175 | renderer: render_username, | |
176 | dataIndex: 'userid' | |
177 | }, | |
178 | { | |
179 | header: gettext('Realm'), | |
180 | width: 100, | |
181 | sortable: true, | |
182 | renderer: render_realm, | |
183 | dataIndex: 'userid' | |
184 | }, | |
185 | { | |
186 | header: gettext('Enabled'), | |
187 | width: 80, | |
188 | sortable: true, | |
189 | renderer: PVE.Utils.format_boolean, | |
190 | dataIndex: 'enable' | |
191 | }, | |
192 | { | |
193 | header: gettext('Expire'), | |
194 | width: 80, | |
195 | sortable: true, | |
196 | renderer: PVE.Utils.format_expire, | |
197 | dataIndex: 'expire' | |
198 | }, | |
199 | { | |
200 | header: gettext('Name'), | |
201 | width: 150, | |
202 | sortable: true, | |
203 | renderer: render_full_name, | |
204 | dataIndex: 'firstname' | |
205 | }, | |
206 | { | |
ee7a4dad DM |
207 | header: gettext('Comment'), |
208 | sortable: false, | |
2eb0767b | 209 | renderer: Ext.String.htmlEncode, |
ee7a4dad DM |
210 | dataIndex: 'comment', |
211 | flex: 1 | |
212 | } | |
213 | ], | |
214 | listeners: { | |
c0b3df6e | 215 | activate: reload, |
ee7a4dad DM |
216 | itemdblclick: run_editor |
217 | } | |
218 | }); | |
219 | ||
220 | me.callParent(); | |
221 | } | |
222 | }); |