1acceb941d
Print all links through new uri.js component Refactor the router to use more predictable parsing Fix linking to entities with weird names (that contain slashes, + etc.)
63 lines
2.2 KiB
JavaScript
63 lines
2.2 KiB
JavaScript
'use strict';
|
|
|
|
const router = require('../router.js');
|
|
const api = require('../api.js');
|
|
const uri = require('../util/uri.js');
|
|
const topNavigation = require('../models/top_navigation.js');
|
|
const PasswordResetView = require('../views/password_reset_view.js');
|
|
|
|
class PasswordResetController {
|
|
constructor() {
|
|
topNavigation.activate('login');
|
|
topNavigation.setTitle('Password reminder');
|
|
|
|
this._passwordResetView = new PasswordResetView();
|
|
this._passwordResetView.addEventListener(
|
|
'submit', e => this._evtReset(e));
|
|
}
|
|
|
|
_evtReset(e) {
|
|
this._passwordResetView.clearMessages();
|
|
this._passwordResetView.disableForm();
|
|
api.forget();
|
|
api.logout();
|
|
api.get(uri.formatApiLink('password-reset', e.detail.userNameOrEmail))
|
|
.then(() => {
|
|
this._passwordResetView.showSuccess(
|
|
'E-mail has been sent. To finish the procedure, ' +
|
|
'please click the link it contains.');
|
|
}, error => {
|
|
this._passwordResetView.showError(error.message);
|
|
this._passwordResetView.enableForm();
|
|
});
|
|
}
|
|
}
|
|
|
|
class PasswordResetFinishController {
|
|
constructor(name, token) {
|
|
api.forget();
|
|
api.logout();
|
|
let password = null;
|
|
api.post(uri.formatApiLink('password-reset', name), {token: token})
|
|
.then(response => {
|
|
password = response.password;
|
|
return api.login(name, password, false);
|
|
}).then(() => {
|
|
const ctx = router.show(uri.formatClientLink());
|
|
ctx.controller.showSuccess('New password: ' + password);
|
|
}, error => {
|
|
const ctx = router.show(uri.formatClientLink());
|
|
ctx.controller.showError(error.message);
|
|
});
|
|
}
|
|
}
|
|
|
|
module.exports = router => {
|
|
router.enter(['password-reset'], (ctx, next) => {
|
|
ctx.controller = new PasswordResetController();
|
|
});
|
|
router.enter(['password-reset', ':descriptor'], (ctx, next) => {
|
|
const [name, token] = ctx.parameters.descriptor.split(':', 2);
|
|
ctx.controller = new PasswordResetFinishController(name, token);
|
|
});
|
|
};
|