rutilus-analytics-node-js
Version:
Provides a GUI web app that allows users to examine their data in detail. Includes CSV export functionality.
99 lines (88 loc) • 2.62 kB
JavaScript
/**
* Rutilus
*
* @homepage https://gmrutilus.github.io
* @license Apache-2.0
*/
/**
* Contains the route used to recover an account
*/
/** @module */
module.exports = /** @param {KoaCtx} ctx
@param {Function} next */ async (ctx, next) => {
const {
errorHandler,
schemas,
emailer,
} = ctx.res;
const {
email,
password,
token,
} = ctx.request.body;
// Requesting a token by email
if (email && (!password && !token)) {
await new Promise((resolve) => {
schemas.Accounts.generateToken(email, (err, token) => {
if (err) {
ctx.res.status = {
requestingToken: true,
userFound: 0,
error: errorHandler.dbErrorCatcher(err),
};
}
else if (!token) {
ctx.res.status = {
requestingToken: true,
userFound: 0,
}
}
else {
emailer.sendPasswordRecovery(email, token);
ctx.res.status = {
requestingToken: true,
userFound: 1,
token,
};
}
resolve();
});
});
}
// Resetting the password
else if (password && token && !email) {
await new Promise((resolve) => {
schemas.Accounts.resetPassword(password, token, (err, didReset) => {
if (err) {
ctx.res.status = {
requestingToken: false,
passwordUpdated: false,
userFound: 0,
error: errorHandler.dbErrorCatcher(err)
};
}
else if (!didReset) {
ctx.res.status = {
requestingToken: false,
passwordUpdated: false,
userFound: 0,
};
}
else {
ctx.res.status = {
requestingToken: false,
passwordUpdated: true,
userFound: 1,
};
}
resolve();
});
});
}
else {
ctx.res.status = {
error: 'Illegal parameters',
};
}
if (next) { await next(); }
};