'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: %s'.format(_('Password strength'), _('More Characters')); else if (strongRegex.test(value)) strength.innerHTML = '%s: %s'.format(_('Password strength'), _('Strong')); else if (mediumRegex.test(value)) strength.innerHTML = '%s: %s'.format(_('Password strength'), _('Medium')); else strength.innerHTML = '%s: %s'.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.childNodes[1].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 });