99 lines
2.6 KiB
JavaScript
99 lines
2.6 KiB
JavaScript
'use strict';
|
|
'require ui';
|
|
'require dom';
|
|
'require form';
|
|
'require view';
|
|
'require request';
|
|
|
|
var data = { login: {} };
|
|
|
|
return view.extend({
|
|
load: function() {
|
|
var m, s, o;
|
|
|
|
m = new form.JSONMap(data);
|
|
s = m.section(form.NamedSection, 'login');
|
|
|
|
o = s.option(form.Value, 'username', _('Username'));
|
|
o.default = L.env.default_login_user;
|
|
|
|
o = s.option(form.Value, 'password', _('Password'));
|
|
o.password = true;
|
|
o.validate = function(section_id, value) {
|
|
var msg = document.querySelector('alert-message');
|
|
|
|
if (msg && value.length)
|
|
msg.parentNode.removeChild(msg);
|
|
|
|
return true;
|
|
};
|
|
|
|
return m.render();
|
|
},
|
|
|
|
render: function(form) {
|
|
ui.showModal(_('Authorization Required'), [
|
|
form,
|
|
E('hr'),
|
|
E('div', { 'class': 'alert-message error hidden' }, [
|
|
_('Invalid username and/or password! Please try again.')
|
|
]),
|
|
E('button', {
|
|
'class': 'btn cbi-button-positive important',
|
|
'click': ui.createHandlerFn(this, 'handleLogin', form)
|
|
}, [ _('Login') ])
|
|
], 'login');
|
|
|
|
document.querySelector('[id="widget.cbid.json.login.password"]').focus();
|
|
|
|
form.addEventListener('keyup', L.bind(function(form, ev) {
|
|
if (ev.key === 'Enter' || ev.keyCode === 13)
|
|
document.querySelector('.cbi-button-positive.important').click();
|
|
}, this, form));
|
|
|
|
return E('div', { 'class': 'spinning' }, _('Loading view…'));
|
|
},
|
|
|
|
handleLoginError: function(err) {
|
|
document.querySelectorAll('.alert-message.error').forEach(function(msg) {
|
|
msg.firstChild.data = _('The login request failed with error: %h').format(err.message);
|
|
msg.classList.remove('hidden');
|
|
msg.classList.add('flash');
|
|
});
|
|
},
|
|
|
|
handleLoginReply: function(res) {
|
|
if (res.status != 403) {
|
|
ui.hideModal();
|
|
location.reload();
|
|
|
|
return;
|
|
}
|
|
|
|
document.querySelectorAll('.alert-message.error').forEach(function(msg) {
|
|
msg.firstChild.data = _('Invalid username and/or password! Please try again.');
|
|
msg.classList.remove('hidden');
|
|
msg.classList.add('flash');
|
|
});
|
|
},
|
|
|
|
handleLogin: function(form, ev) {
|
|
var fd = new FormData();
|
|
|
|
document.querySelectorAll('.alert-message.error').forEach(function(msg) {
|
|
msg.classList.add('hidden');
|
|
msg.classList.remove('flash');
|
|
});
|
|
|
|
dom.callClassMethod(form, 'save');
|
|
|
|
fd.append('luci_username', data.login.username != null ? data.login.username : '');
|
|
fd.append('luci_password', data.login.password != null ? data.login.password : '');
|
|
|
|
Object.getPrototypeOf(L).notifySessionExpiry = function() {};
|
|
|
|
return request.post(location.href, fd).then(this.handleLoginReply, this.handleLoginError);
|
|
},
|
|
|
|
addFooter: function() {}
|
|
});
|