]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/window/LoginWindow.js
2 Ext
.define('PVE.window.LoginWindow', {
3 extend
: 'Ext.window.Window',
7 xclass
: 'Ext.app.ViewController',
12 var form
= this.lookupReference('loginForm');
13 var unField
= this.lookupReference('usernameField');
14 var saveunField
= this.lookupReference('saveunField');
15 var view
= this.getView();
17 if (!form
.isValid()) {
21 view
.el
.mask(gettext('Please wait...'), 'x-mask-loading');
23 // set or clear username
24 var sp
= Ext
.state
.Manager
.getProvider();
25 if (saveunField
.getValue() === true) {
26 sp
.set(unField
.getStateId(), unField
.getValue());
28 sp
.clear(unField
.getStateId());
30 sp
.set(saveunField
.getStateId(), saveunField
.getValue());
33 failure: function(f
, resp
) {
36 success: function(f
, resp
) {
39 var data
= resp
.result
.data
;
40 if (Ext
.isDefined(data
.NeedTFA
)) {
41 // Store first factor login information first:
42 data
.LoggedOut
= true;
43 Proxmox
.Utils
.setAuthData(data
);
45 if (Ext
.isDefined(data
.U2FChallenge
)) {
56 failure: function(resp
) {
58 var view
= me
.getView();
60 var handler = function() {
61 var uf
= me
.lookupReference('usernameField');
65 let emsg
= gettext("Login failed. Please try again");
67 if (resp
.failureType
=== "connect") {
68 emsg
= gettext("Connection failure. Network error or Proxmox VE services not running?");
71 Ext
.MessageBox
.alert(gettext('Error'), emsg
, handler
);
73 success: function(data
) {
75 var view
= me
.getView();
76 var handler
= view
.handler
|| Ext
.emptyFn
;
77 handler
.call(me
, data
);
81 perform_otp: function() {
83 var win
= Ext
.create('PVE.window.TFALoginWindow', {
84 onLogin: function(value
) {
87 onCancel: function() {
88 Proxmox
.LoggedOut
= false;
89 Proxmox
.Utils
.authClear();
96 perform_u2f: function(data
) {
99 var msg
= Ext
.Msg
.show({
100 title
: 'U2F: '+gettext('Verification'),
101 message
: gettext('Please press the button on your U2F Device'),
104 var chlg
= data
.U2FChallenge
;
106 version
: chlg
.version
,
107 keyHandle
: chlg
.keyHandle
,
109 u2f
.sign(chlg
.appId
, chlg
.challenge
, [key
], function(res
) {
112 Proxmox
.Utils
.authClear();
113 Ext
.Msg
.alert(gettext('Error'), PVE
.Utils
.render_u2f_error(res
.errorCode
));
116 delete res
.errorCode
;
117 me
.finish_tfa(JSON
.stringify(res
));
120 finish_tfa: function(res
) {
122 var view
= me
.getView();
123 view
.el
.mask(gettext('Please wait...'), 'x-mask-loading');
124 var params
= { response
: res
};
125 Proxmox
.Utils
.API2Request({
126 url
: '/api2/extjs/access/tfa',
129 timeout
: 5000, // it'll delay both success & failure
130 success: function(resp
, opts
) {
132 // Fill in what we copy over from the 1st factor:
133 var data
= resp
.result
.data
;
134 data
.CSRFPreventionToken
= Proxmox
.CSRFPreventionToken
;
135 data
.username
= Proxmox
.UserName
;
136 // Finish logging in:
139 failure: function(resp
, opts
) {
140 Proxmox
.Utils
.authClear();
147 'field[name=username]': {
148 specialkey: function(f
, e
) {
149 if (e
.getKey() === e
.ENTER
) {
150 var pf
= this.lookupReference('passwordField');
151 if (!pf
.getValue()) {
157 'field[name=lang]': {
158 change: function(f
, value
) {
159 var dt
= Ext
.Date
.add(new Date(), Ext
.Date
.YEAR
, 10);
160 Ext
.util
.Cookies
.set('PVELangCookie', value
, dt
);
161 this.getView().mask(gettext('Please wait...'), 'x-mask-loading');
162 window
.location
.reload();
165 'button[reference=loginButton]': {
170 var sp
= Ext
.state
.Manager
.getProvider();
171 var checkboxField
= this.lookupReference('saveunField');
172 var unField
= this.lookupReference('usernameField');
174 var checked
= sp
.get(checkboxField
.getStateId());
175 checkboxField
.setValue(checked
);
177 if (checked
=== true) {
178 var username
= sp
.get(unField
.getStateId());
179 unField
.setValue(username
);
180 var pwField
= this.lookupReference('passwordField');
196 title
: gettext('Proxmox VE Login'),
198 defaultFocus
: 'usernameField',
199 defaultButton
: 'loginButton',
204 url
: '/api2/extjs/access/ticket',
205 reference
: 'loginForm',
215 fieldLabel
: gettext('User name'),
217 itemId
: 'usernameField',
218 reference
: 'usernameField',
219 stateId
: 'login-username',
223 inputType
: 'password',
224 fieldLabel
: gettext('Password'),
226 reference
: 'passwordField',
229 xtype
: 'pmxRealmComboBox',
233 xtype
: 'proxmoxLanguageSelector',
234 fieldLabel
: gettext('Language'),
235 value
: Ext
.util
.Cookies
.get('PVELangCookie') || Proxmox
.defaultLang
|| 'en',
237 reference
: 'langField',
244 fieldLabel
: gettext('Save User name'),
245 name
: 'saveusername',
246 reference
: 'saveunField',
247 stateId
: 'login-saveusername',
253 text
: gettext('Login'),
254 reference
: 'loginButton',
259 Ext
.define('PVE.window.TFALoginWindow', {
260 extend
: 'Ext.window.Window',
264 title
: 'Two-Factor Authentication',
266 defaultButton
: 'loginButton',
267 defaultFocus
: 'otpField',
270 xclass
: 'Ext.app.ViewController',
273 var view
= me
.getView();
274 view
.onLogin(me
.lookup('otpField').getValue());
279 var view
= me
.getView();
288 fieldLabel
: gettext('Please enter your OTP verification code:'),
291 reference
: 'otpField',
298 text
: gettext('Login'),
299 reference
: 'loginButton',
303 text
: gettext('Cancel'),