Skip to content
Snippets Groups Projects
Commit cb4840f0 authored by Gustavo Soviersovski's avatar Gustavo Soviersovski
Browse files

Add reset token routes

parent 0db31b15
No related branches found
No related tags found
2 merge requests!116Release v1.0.0,!78Add reset token routes
Pipeline #
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const libs = `${process.cwd()}/libs`;
const log = require(`${libs}/log`)(module);
const User = require(`${libs}/models/user`);
const uuid = require('node-uuid');
let ResetToken = new Schema({
userId: {
type: Schema.Types.ObjectId,
required: true,
ref: 'User'
},
token: {
type: String,
required: true
},
reset: {
type: Boolean,
required: true,
default: false
},
createdAt: {
type: Date,
required: true,
default: Date.now
}
});
ResetToken.methods.createResetToken = function (done) {
let verificationToken = this;
let token = uuid.v4();
ResetToken.set('token', token);
ResetToken.reset = false;
resetToken.save(function(err) {
if (err)
return done(err);
return done(null, token);
})
}
module.exports = mongoose.model('ResetToken', ResetToken);
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;
console.log('verificando token');
ResetToken.findOne({token: token}, (err, rToken) => {
if(err) {
log.error(err);
return next(err);
}
if(!rToken) {
// TODO: generate new reset token
console.log('Token não existe');
res.statusCode = 404;
return next({msg: 'Token not found', status:404});
}
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;
console.log('verificando token');
ResetToken.findOne({token: token}, (err, rToken) => {
if(err) {
log.error(err);
return next(err);
}
if(!rToken) {
// TODO: generate new reset token
console.log('Token não existe');
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.query.password;
user.save((err) => {
if(err) {
log.error(err);
next(err);
}
res.json({msg: "Senha alterada com sucesso"});
})
});
});
})
module.exports = resetTokenApp;
......@@ -12,6 +12,8 @@ const User = require(`${libs}/models/user`);
const VerificationToken = require(`${libs}/models/verificationToken`);
const ResetToken = require(`${libs}/models/resetToken`);
const response = require(`${libs}/middlewares/response`);
const email = require(`${libs}/middlewares/email`);
......@@ -25,7 +27,7 @@ function emailSyntax(email) {
userApp.get('/schooling', (req, res, next) => {
req.result = [
'Não estudou',
'Não estudou',
'Ensino Fundamental Incompleto',
'Ensino Fundamental Completo',
'Ensino Médio',
......@@ -173,4 +175,47 @@ userApp.post('/', (req, res, next) => {
});
});
userApp.get('/reset-password', (req, res, next) => {
let email = req.query.email;
User.findOne({email: email}, (err, user)=> {
if(err) {
log.error(err);
let errors = [];
for(let errName in err.errors) {
errors.push(err.errors[errName].message);
}
res.statusCode = 400;
return res.json({err, errors});
}
if (!user)
res.json({msg: "O usuário não está cadastrado"});
else {
let resetToken = new ResetToken({
userId: user._id
});
resetToken.createResetToken((err, token) => {
if (err) {
log.error(err);
return next(err);
}
let url = config.default.lde.url + '/reset-password';
let text = `Olá, ${user.name}.\n\nRecebemos uma solicitação para redefinir sua senha do Laboratório de Dados Educacionais. Clique neste link para redefinir a sua senha: ${url}/${token}`;
let mailOptions = {
to: `"${user.name} <${user.email}>"`,
subject: "Redefinição de Senha - Laboratório de Dados Educacionais",
text
}
email(mailOptions, (err, info) => {
if(err) {
log.error(err);
res.json({msg: 'Undelivered Reset Password Mail'});
}
log.debug(`Message ${info.messageId} sent: ${info.response}`);
res.json({msg: 'Reset Password Mail Successfully Delivered'});
});
})
}
})
})
module.exports = userApp;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment