'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); }); };