]>
Commit | Line | Data |
---|---|---|
ea4954b4 | 1 | Ext.define('PVE.dc.UserEdit', { |
9fccc702 | 2 | extend: 'Proxmox.window.Edit', |
ea4954b4 DM |
3 | alias: ['widget.pveDcUserEdit'], |
4 | ||
5 | isAdd: true, | |
6 | ||
8058410f | 7 | initComponent: function() { |
ea4954b4 DM |
8 | var me = this; |
9 | ||
d5e771ce | 10 | me.isCreate = !me.userid; |
ea4954b4 DM |
11 | |
12 | var url; | |
13 | var method; | |
14 | var realm; | |
15 | ||
d5e771ce | 16 | if (me.isCreate) { |
ea4954b4 DM |
17 | url = '/api2/extjs/access/users'; |
18 | method = 'POST'; | |
19 | } else { | |
919be4fb | 20 | url = '/api2/extjs/access/users/' + encodeURIComponent(me.userid); |
ea4954b4 DM |
21 | method = 'PUT'; |
22 | } | |
23 | ||
24 | var verifypw; | |
25 | var pwfield; | |
26 | ||
27 | var validate_pw = function() { | |
28 | if (verifypw.getValue() !== pwfield.getValue()) { | |
fb81dfdc | 29 | return gettext("Passwords do not match"); |
ea4954b4 DM |
30 | } |
31 | return true; | |
32 | }; | |
33 | ||
2a4971d8 | 34 | verifypw = Ext.createWidget('textfield', { |
ea4954b4 | 35 | inputType: 'password', |
2a4971d8 | 36 | fieldLabel: gettext('Confirm password'), |
ea4954b4 DM |
37 | name: 'verifypassword', |
38 | submitValue: false, | |
39 | disabled: true, | |
40 | hidden: true, | |
f6710aac | 41 | validator: validate_pw, |
ea4954b4 DM |
42 | }); |
43 | ||
2a4971d8 | 44 | pwfield = Ext.createWidget('textfield', { |
ea4954b4 | 45 | inputType: 'password', |
2a4971d8 | 46 | fieldLabel: gettext('Password'), |
ea4954b4 DM |
47 | minLength: 5, |
48 | name: 'password', | |
49 | disabled: true, | |
50 | hidden: true, | |
f6710aac | 51 | validator: validate_pw, |
ea4954b4 DM |
52 | }); |
53 | ||
54 | var update_passwd_field = function(realm) { | |
55 | if (realm === 'pve') { | |
56 | pwfield.setVisible(true); | |
57 | pwfield.setDisabled(false); | |
58 | verifypw.setVisible(true); | |
59 | verifypw.setDisabled(false); | |
60 | } else { | |
61 | pwfield.setVisible(false); | |
62 | pwfield.setDisabled(true); | |
63 | verifypw.setVisible(false); | |
64 | verifypw.setDisabled(true); | |
65 | } | |
ea4954b4 DM |
66 | }; |
67 | ||
68 | var column1 = [ | |
69 | { | |
d5e771ce | 70 | xtype: me.isCreate ? 'textfield' : 'displayfield', |
ea4954b4 DM |
71 | name: 'userid', |
72 | fieldLabel: gettext('User name'), | |
73 | value: me.userid, | |
1011b569 | 74 | renderer: Ext.String.htmlEncode, |
ea4954b4 | 75 | allowBlank: false, |
f6710aac | 76 | submitValue: me.isCreate ? true : false, |
ea4954b4 DM |
77 | }, |
78 | pwfield, verifypw, | |
79 | { | |
80 | xtype: 'pveGroupSelector', | |
81 | name: 'groups', | |
82 | multiSelect: true, | |
83 | allowBlank: true, | |
f6710aac | 84 | fieldLabel: gettext('Group'), |
ea4954b4 DM |
85 | }, |
86 | { | |
3d3199a6 TL |
87 | xtype: 'pmxExpireDate', |
88 | name: 'expire', | |
ea4954b4 DM |
89 | }, |
90 | { | |
896c0d50 | 91 | xtype: 'proxmoxcheckbox', |
ea4954b4 DM |
92 | fieldLabel: gettext('Enabled'), |
93 | name: 'enable', | |
94 | uncheckedValue: 0, | |
95 | defaultValue: 1, | |
f6710aac TL |
96 | checked: true, |
97 | }, | |
ea4954b4 DM |
98 | ]; |
99 | ||
100 | var column2 = [ | |
101 | { | |
102 | xtype: 'textfield', | |
103 | name: 'firstname', | |
f6710aac | 104 | fieldLabel: gettext('First Name'), |
ea4954b4 DM |
105 | }, |
106 | { | |
107 | xtype: 'textfield', | |
108 | name: 'lastname', | |
f6710aac | 109 | fieldLabel: gettext('Last Name'), |
ea4954b4 DM |
110 | }, |
111 | { | |
112 | xtype: 'textfield', | |
113 | name: 'email', | |
114 | fieldLabel: gettext('E-Mail'), | |
f6710aac TL |
115 | vtype: 'proxmoxMail', |
116 | }, | |
ea4954b4 DM |
117 | ]; |
118 | ||
d5e771ce | 119 | if (me.isCreate) { |
f6710aac | 120 | column1.splice(1, 0, { |
f23e78f4 | 121 | xtype: 'pmxRealmComboBox', |
ea4954b4 DM |
122 | name: 'realm', |
123 | fieldLabel: gettext('Realm'), | |
124 | allowBlank: false, | |
125 | matchFieldWidth: false, | |
126 | listConfig: { width: 300 }, | |
127 | listeners: { | |
8058410f | 128 | change: function(combo, newValue) { |
ea4954b4 DM |
129 | realm = newValue; |
130 | update_passwd_field(realm); | |
f6710aac | 131 | }, |
ea4954b4 | 132 | }, |
f6710aac | 133 | submitValue: false, |
ea4954b4 DM |
134 | }); |
135 | } | |
136 | ||
ef4ef788 | 137 | var ipanel = Ext.create('Proxmox.panel.InputPanel', { |
ea4954b4 DM |
138 | column1: column1, |
139 | column2: column2, | |
7fb4767d TL |
140 | columnB: [ |
141 | { | |
142 | xtype: 'textfield', | |
143 | name: 'comment', | |
f6710aac TL |
144 | fieldLabel: gettext('Comment'), |
145 | }, | |
7fb4767d TL |
146 | ], |
147 | advancedItems: [ | |
148 | { | |
149 | xtype: 'textfield', | |
150 | name: 'keys', | |
f6710aac TL |
151 | fieldLabel: gettext('Key IDs'), |
152 | }, | |
7fb4767d | 153 | ], |
ea4954b4 | 154 | onGetValues: function(values) { |
ea4954b4 DM |
155 | if (realm) { |
156 | values.userid = values.userid + '@' + realm; | |
157 | } | |
158 | ||
159 | if (!values.password) { | |
160 | delete values.password; | |
161 | } | |
162 | ||
163 | return values; | |
f6710aac | 164 | }, |
ea4954b4 DM |
165 | }); |
166 | ||
167 | Ext.applyIf(me, { | |
168 | subject: gettext('User'), | |
169 | url: url, | |
170 | method: method, | |
171 | fieldDefaults: { | |
f6710aac | 172 | labelWidth: 110, // for spanish translation |
ea4954b4 | 173 | }, |
8058410f | 174 | items: [ipanel], |
ea4954b4 DM |
175 | }); |
176 | ||
177 | me.callParent(); | |
178 | ||
d5e771ce | 179 | if (!me.isCreate) { |
ea4954b4 DM |
180 | me.load({ |
181 | success: function(response, options) { | |
182 | var data = response.result.data; | |
ea4954b4 | 183 | me.setValues(data); |
5b25580d | 184 | if (data.keys) { |
8058410f | 185 | if (data.keys === 'x!oath' || data.keys === 'x!u2f') { |
5b25580d WL |
186 | me.down('[name="keys"]').setDisabled(1); |
187 | } | |
188 | } | |
f6710aac | 189 | }, |
ea4954b4 DM |
190 | }); |
191 | } | |
f6710aac | 192 | }, |
ea4954b4 | 193 | }); |