112 lines
2.3 KiB
JavaScript
112 lines
2.3 KiB
JavaScript
var Component = require('vn/component');
|
|
var Toast = require('../toast');
|
|
var Tpl = require('./ui.xml').default;
|
|
|
|
/**
|
|
* A change password popup.
|
|
*/
|
|
module.exports = new Class({
|
|
Extends: Component,
|
|
Tag: 'htk-change-password',
|
|
Properties: {
|
|
/**
|
|
* The token url.
|
|
*/
|
|
token: {
|
|
type: String
|
|
,set(value) {
|
|
this._token = value;
|
|
}
|
|
,get() {
|
|
return this._token;
|
|
}
|
|
},
|
|
conn: {
|
|
type: Db.Connection
|
|
,set(x) {
|
|
this._conn = x
|
|
}
|
|
,get() {
|
|
return this._conn;
|
|
}
|
|
},
|
|
user: {
|
|
type: Object
|
|
}
|
|
},
|
|
|
|
initialize(props) {
|
|
Component.prototype.initialize.call(this, props);
|
|
},
|
|
|
|
async open() {
|
|
this.passwordForm = await this.conn.get('UserPasswords/findOne')
|
|
this.loadTemplateFromString(Tpl);
|
|
|
|
this.$.oldPassword.value = '';
|
|
this.$.newPassword.value = '';
|
|
this.$.repeatPassword.value = '';
|
|
|
|
this.$.oldPassword.style.display = this.token ? 'none' : 'block';
|
|
this.$.changePassword.open();
|
|
|
|
if (this.token)
|
|
this.$.newPassword.focus();
|
|
else
|
|
this.$.oldPassword.focus();
|
|
},
|
|
|
|
async onPassModifyClick() {
|
|
const form = this.$.changePassword.node;
|
|
Vn.Node.disableInputs(form);
|
|
try {
|
|
const oldPassword = this.$.oldPassword.value;
|
|
const newPassword = this.$.newPassword.value;
|
|
const repeatedPassword = this.$.repeatPassword.value;
|
|
|
|
try {
|
|
if (newPassword == '' && repeatedPassword == '')
|
|
throw new Error(_('Passwords empty'));
|
|
if (newPassword !== repeatedPassword)
|
|
throw new Error(_('Passwords doesn\'t match'));
|
|
} catch (err) {
|
|
return Toast.showError(err.message);
|
|
}
|
|
|
|
const params = {newPassword};
|
|
|
|
|
|
try {
|
|
if (this.token) {
|
|
const headers = {
|
|
Authorization: this.token
|
|
};
|
|
await this.conn.post('VnUsers/reset-password', params, {headers});
|
|
} else {
|
|
params.userId = this.user.id;
|
|
params.oldPassword = oldPassword;
|
|
|
|
await this.conn.patch(`Accounts/change-password`, params);
|
|
}
|
|
} catch(err) {
|
|
Toast.showError(err.message);
|
|
|
|
if (this.token)
|
|
this.$.newPassword.select();
|
|
else
|
|
this.$.oldPassword.select();
|
|
|
|
return;
|
|
}
|
|
|
|
if(this.user)
|
|
await this.conn.open(this.user.name, newPassword);
|
|
this.$.changePassword.hide();
|
|
} finally {
|
|
Vn.Node.disableInputs(form, false);
|
|
}
|
|
|
|
Toast.showMessage(_('Password changed!'));
|
|
}
|
|
});
|