]>
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
)) {
57 failure: function(resp
) {
59 var view
= me
.getView();
61 var handler = function() {
62 var uf
= me
.lookupReference('usernameField');
66 let emsg
= gettext("Login failed. Please try again");
68 if (resp
.failureType
=== "connect") {
69 emsg
= gettext("Connection failure. Network error or Proxmox VE services not running?");
72 Ext
.MessageBox
.alert(gettext('Error'), emsg
, handler
);
74 success: function(data
) {
76 var view
= me
.getView();
77 var handler
= view
.handler
|| Ext
.emptyFn
;
78 handler
.call(me
, data
);
82 perform_otp: function() {
84 var win
= Ext
.create('PVE.window.TFALoginWindow', {
85 onLogin: function(value
) {
88 onCancel: function() {
89 Proxmox
.LoggedOut
= false;
90 Proxmox
.Utils
.authClear();
97 perform_u2f: function(data
) {
100 var msg
= Ext
.Msg
.show({
101 title
: 'U2F: '+gettext('Verification'),
102 message
: gettext('Please press the button on your U2F Device'),
105 var chlg
= data
.U2FChallenge
;
107 version
: chlg
.version
,
108 keyHandle
: chlg
.keyHandle
110 u2f
.sign(chlg
.appId
, chlg
.challenge
, [key
], function(res
) {
113 Proxmox
.Utils
.authClear();
114 Ext
.Msg
.alert(gettext('Error'), PVE
.Utils
.render_u2f_error(res
.errorCode
));
117 delete res
.errorCode
;
118 me
.finish_tfa(JSON
.stringify(res
));
121 finish_tfa: function(res
) {
123 var view
= me
.getView();
124 view
.el
.mask(gettext('Please wait...'), 'x-mask-loading');
125 var params
= { response
: res
};
126 Proxmox
.Utils
.API2Request({
127 url
: '/api2/extjs/access/tfa',
130 timeout
: 5000, // it'll delay both success & failure
131 success: function(resp
, opts
) {
133 // Fill in what we copy over from the 1st factor:
134 var data
= resp
.result
.data
;
135 data
.CSRFPreventionToken
= Proxmox
.CSRFPreventionToken
;
136 data
.username
= Proxmox
.UserName
;
137 // Finish logging in:
140 failure: function(resp
, opts
) {
141 Proxmox
.Utils
.authClear();
148 'field[name=username]': {
149 specialkey: function(f
, e
) {
150 if (e
.getKey() === e
.ENTER
) {
151 var pf
= this.lookupReference('passwordField');
152 if (!pf
.getValue()) {
158 'field[name=lang]': {
159 change: function(f
, value
) {
160 var dt
= Ext
.Date
.add(new Date(), Ext
.Date
.YEAR
, 10);
161 Ext
.util
.Cookies
.set('PVELangCookie', value
, dt
);
162 this.getView().mask(gettext('Please wait...'), 'x-mask-loading');
163 window
.location
.reload();
166 'button[reference=loginButton]': {
171 var sp
= Ext
.state
.Manager
.getProvider();
172 var checkboxField
= this.lookupReference('saveunField');
173 var unField
= this.lookupReference('usernameField');
175 var checked
= sp
.get(checkboxField
.getStateId());
176 checkboxField
.setValue(checked
);
178 if(checked
=== true) {
179 var username
= sp
.get(unField
.getStateId());
180 unField
.setValue(username
);
181 var pwField
= this.lookupReference('passwordField');
197 title
: gettext('Proxmox VE Login'),
199 defaultFocus
: 'usernameField',
200 defaultButton
: 'loginButton',
205 url
: '/api2/extjs/access/ticket',
206 reference
: 'loginForm',
216 fieldLabel
: gettext('User name'),
218 itemId
: 'usernameField',
219 reference
: 'usernameField',
220 stateId
: 'login-username'
224 inputType
: 'password',
225 fieldLabel
: gettext('Password'),
227 reference
: 'passwordField'
230 xtype
: 'pmxRealmComboBox',
234 xtype
: 'proxmoxLanguageSelector',
235 fieldLabel
: gettext('Language'),
236 value
: Ext
.util
.Cookies
.get('PVELangCookie') || Proxmox
.defaultLang
|| 'en',
238 reference
: 'langField',
245 fieldLabel
: gettext('Save User name'),
246 name
: 'saveusername',
247 reference
: 'saveunField',
248 stateId
: 'login-saveusername',
254 text
: gettext('Login'),
255 reference
: 'loginButton'
260 Ext
.define('PVE.window.TFALoginWindow', {
261 extend
: 'Ext.window.Window',
265 title
: 'Two-Factor Authentication',
267 defaultButton
: 'loginButton',
268 defaultFocus
: 'otpField',
271 xclass
: 'Ext.app.ViewController',
274 var view
= me
.getView();
275 view
.onLogin(me
.lookup('otpField').getValue());
280 var view
= me
.getView();
289 fieldLabel
: gettext('Please enter your OTP verification code:'),
292 reference
: 'otpField',
299 text
: gettext('Login'),
300 reference
: 'loginButton',
304 text
: gettext('Cancel'),