mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-02 07:03:56 +08:00
⛄ Sync 2026-04-23 20:32:35
This commit is contained in:
1 parent
17738c6f79
commit
fe51d2b304
206 files changed
+725671
No files matched your search
@@ -0,0 +1,99 @@
|
||||
'use strict';
|
||||
'require view';
|
||||
'require dom';
|
||||
'require ui';
|
||||
'require form';
|
||||
'require rpc';
|
||||
|
||||
var formData = {
|
||||
password: {
|
||||
pw1: null,
|
||||
pw2: null
|
||||
}
|
||||
};
|
||||
|
||||
var callSetPassword = rpc.declare({
|
||||
object: 'luci',
|
||||
method: 'setPassword',
|
||||
params: [ 'username', 'password' ],
|
||||
expect: { result: false }
|
||||
});
|
||||
|
||||
return view.extend({
|
||||
checkPassword: function(section_id, value) {
|
||||
var strength = document.querySelector('.cbi-value-description'),
|
||||
strongRegex = new RegExp("^(?=.{8,})(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W).*$", "g"),
|
||||
mediumRegex = new RegExp("^(?=.{7,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))).*$", "g"),
|
||||
enoughRegex = new RegExp("(?=.{6,}).*", "g");
|
||||
|
||||
if (strength && value.length) {
|
||||
if (false == enoughRegex.test(value))
|
||||
strength.innerHTML = '%s: <span style="color:red">%s</span>'.format(_('Password strength'), _('More Characters'));
|
||||
else if (strongRegex.test(value))
|
||||
strength.innerHTML = '%s: <span style="color:green">%s</span>'.format(_('Password strength'), _('Strong'));
|
||||
else if (mediumRegex.test(value))
|
||||
strength.innerHTML = '%s: <span style="color:orange">%s</span>'.format(_('Password strength'), _('Medium'));
|
||||
else
|
||||
strength.innerHTML = '%s: <span style="color:red">%s</span>'.format(_('Password strength'), _('Weak'));
|
||||
}
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
render: function() {
|
||||
var m, s, o;
|
||||
|
||||
m = new form.JSONMap(formData, _('Router Password'), _('Changes the administrator password for accessing the device'));
|
||||
m.readonly = !L.hasViewPermission();
|
||||
|
||||
s = m.section(form.NamedSection, 'password', 'password');
|
||||
|
||||
o = s.option(form.Value, 'pw1', _('Password'));
|
||||
o.password = true;
|
||||
o.validate = this.checkPassword;
|
||||
|
||||
o = s.option(form.Value, 'pw2', _('Confirmation'), ' ');
|
||||
o.password = true;
|
||||
o.renderWidget = function(/* ... */) {
|
||||
var node = form.Value.prototype.renderWidget.apply(this, arguments);
|
||||
|
||||
node.querySelector('input').addEventListener('keydown', function(ev) {
|
||||
if (ev.keyCode == 13 && !ev.currentTarget.classList.contains('cbi-input-invalid'))
|
||||
document.querySelector('.cbi-button-save').click();
|
||||
});
|
||||
|
||||
return node;
|
||||
};
|
||||
|
||||
return m.render();
|
||||
},
|
||||
|
||||
handleSave: function() {
|
||||
var map = document.querySelector('.cbi-map');
|
||||
|
||||
return dom.callClassMethod(map, 'save').then(function() {
|
||||
if (formData.password.pw1 == null || formData.password.pw1.length == 0)
|
||||
return;
|
||||
|
||||
if (formData.password.pw1 != formData.password.pw2) {
|
||||
ui.addNotification(null, E('p', _('Given password confirmation did not match, password not changed!')), 'danger');
|
||||
return;
|
||||
}
|
||||
|
||||
return callSetPassword('root', formData.password.pw1).then(function(success) {
|
||||
if (success)
|
||||
ui.addNotification(null, E('p', _('The system password has been successfully changed.')), 'info');
|
||||
else
|
||||
ui.addNotification(null, E('p', _('Failed to change the system password.')), 'danger');
|
||||
|
||||
formData.password.pw1 = null;
|
||||
formData.password.pw2 = null;
|
||||
|
||||
dom.callClassMethod(map, 'render');
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
handleSaveApply: null,
|
||||
handleReset: null
|
||||
});
|
||||
Reference in new issue
Block a user