Skip to content
Snippets Groups Projects
Commit 4d9cc31a authored by Vytor Calixto's avatar Vytor Calixto :space_invader:
Browse files

Merge branch 'reset_token' into development

Merges: !78
parents 188e065b cb4840f0
No related branches found
No related tags found
1 merge request!116Release v1.0.0
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`);
......@@ -178,4 +180,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