73 lines
2.4 KiB
JavaScript
73 lines
2.4 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);
|
|
});
|
|
};
|