const express = require('express'); const resetTokenApp = express.Router(); const libs = `${process.cwd()}/libs`; const log = require(`${libs}/log`)(module); const ResetToken = require(`${libs}/models/resetToken`); const User = require(`${libs}/models/user`); resetTokenApp.get('/:token', (req, res, next) => { let token = req.params.token; ResetToken.findOne({token: token}, (err, rToken) => { if(err) { log.error(err); return next(err); } if(!rToken) { // TODO: generate new reset token res.statusCode = 404; return next({msg: 'Token not found', status:404}); } if (rToken.hasExpired()) { res.statusCode = 410; ResetToken.remove({token: token}, (err) => { if(err) { log.error(err); next(err); } }) return next({msg: 'Token expired', status: 410}); } User.findById(rToken.userId, (err, user) => { if(err) { log.error(err); next(err); } let u = user.toObject(); delete u.salt; delete u.hashedPassword; res.json({user: u}); }); }); }); resetTokenApp.post('/:token', (req, res, next) => { let token = req.params.token; ResetToken.findOne({token: token}, (err, rToken) => { if(err) { log.error(err); return next(err); } if(!rToken) { res.statusCode = 404; return next({msg: 'Token not found', status:404}); } User.findById(rToken.userId, (err, user) => { if(err) { log.error(err); next(err); } user.password = req.body.password; user.save((err) => { if(err) { log.error(err); next(err); } ResetToken.remove({token: token}, (err) => { if(err) { log.error(err); next(err); } }) res.json({msg: "Senha alterada com sucesso"}); }) }); }); }) module.exports = resetTokenApp;