-
Notifications
You must be signed in to change notification settings - Fork 2.3k
/
Copy pathforgetPassword.js
79 lines (63 loc) · 1.9 KB
/
forgetPassword.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
const Joi = require('joi');
const mongoose = require('mongoose');
const checkAndCorrectURL = require('./checkAndCorrectURL');
const sendMail = require('./sendMail');
const shortid = require('shortid');
const { loadSettings } = require('@/middlewares/settings');
const { useAppSettings } = require('@/settings');
const forgetPassword = async (req, res, { userModel }) => {
const UserPassword = mongoose.model(userModel + 'Password');
const User = mongoose.model(userModel);
const { email } = req.body;
// validate
const objectSchema = Joi.object({
email: Joi.string()
.email({ tlds: { allow: true } })
.required(),
});
const { error, value } = objectSchema.validate({ email });
if (error) {
return res.status(409).json({
success: false,
result: null,
error: error,
message: 'Invalid email.',
errorMessage: error.message,
});
}
const user = await User.findOne({ email: email, removed: false });
// console.log(user);
if (!user)
return res.status(404).json({
success: false,
result: null,
message: 'No account with this email has been registered.',
});
const resetToken = shortid.generate();
await UserPassword.findOneAndUpdate(
{ user: user._id },
{ resetToken },
{
new: true,
}
).exec();
const settings = useAppSettings();
const idurar_app_email = settings['idurar_app_email'];
const idurar_base_url = settings['idurar_base_url'];
const url = checkAndCorrectURL(idurar_base_url);
const link = url + '/resetpassword/' + user._id + '/' + resetToken;
await sendMail({
email,
name: user.name,
link,
subject: 'Reset your password | idurar',
idurar_app_email,
type: 'passwordVerfication',
});
return res.status(200).json({
success: true,
result: null,
message: 'Check your email inbox , to reset your password',
});
};
module.exports = forgetPassword;