nginx-proxy-manager/frontend/js/app/user/password.js
2021-05-10 19:58:28 +02:00

70 lines
2.1 KiB
JavaScript

const Mn = require('backbone.marionette');
const App = require('../main');
const template = require('./password.ejs');
require('jquery-serializejson');
module.exports = Mn.View.extend({
template: template,
className: 'modal-dialog',
ui: {
form: 'form',
buttons: '.modal-footer button',
cancel: 'button.cancel',
save: 'button.save',
newSecretError: '.new-secret-error',
generalError: '#error-info',
},
events: {
'click @ui.save': function (e) {
e.preventDefault();
this.ui.newSecretError.hide();
this.ui.generalError.hide();
let form = this.ui.form.serializeJSON();
if (form.new_password1 !== form.new_password2) {
this.ui.newSecretError.text('Passwords do not match!').show();
return;
}
let data = {
type: 'password',
current: form.current_password,
secret: form.new_password1
};
this.ui.buttons.prop('disabled', true).addClass('btn-disabled');
App.Api.Users.setPassword(this.model.get('id'), data)
.then(() => {
App.UI.closeModal();
App.Controller.showUsers();
})
.catch(err => {
// Change error message to make it a little clearer
if (err.message === 'Invalid password') {
err.message = 'Current password is invalid';
}
this.ui.generalError.text(err.message).show();
this.ui.buttons.prop('disabled', false).removeClass('btn-disabled');
});
}
},
isSelf: function () {
return App.Cache.User.get('id') === this.model.get('id');
},
templateContext: function () {
return {
isSelf: this.isSelf.bind(this)
};
},
onRender: function () {
this.ui.newSecretError.hide();
this.ui.generalError.hide();
},
});