|
1 | 1 | const crypto = require("crypto");
|
2 | 2 | const User = require("../../models/userModal");
|
3 |
| -const decrypt = (cipher) => { |
4 |
| - const decipher = crypto.createDecipher(process.env.ENCRYPTION_ALGO, process.env.CRYPTOJS_SECRET); |
5 |
| - var decrypted = decipher.update(cipher, "hex", "utf8") + decipher.final("utf8"); |
| 3 | +const decrypt = (cipher) => { |
| 4 | + const decipher = crypto.createDecipher( |
| 5 | + process.env.ENCRYPTION_ALGO, |
| 6 | + process.env.CRYPTOJS_SECRET |
| 7 | + ); |
| 8 | + var decrypted = |
| 9 | + decipher.update(cipher, "hex", "utf8") + decipher.final("utf8"); |
6 | 10 | return decrypted;
|
7 |
| -} |
| 11 | +}; |
8 | 12 | const verifyEmail = async (req, res) => {
|
9 |
| - const host = req.get('host'); |
10 |
| - if(`${req.protocol}://${host}` == `${req.session.protocol}://${req.session.host}`){//domain matched |
11 |
| - //now we don't need protocol and host in our session variables; |
12 |
| - req.session.protocol = null; |
13 |
| - req.session.host = null; |
14 |
| - const encryptedID = req.query.id; |
| 13 | + const host = req.get("host"); |
| 14 | + if ( |
| 15 | + `${req.protocol}://${host}` == |
| 16 | + `${process.env.PROTOCOL}://${process.env.HOST}` |
| 17 | + ) { |
| 18 | + //domain matched |
| 19 | + const encryptedID = req.query.a; //since a = id |
| 20 | + const encryptedTime = req.query.b; //since b = time |
15 | 21 | console.log(encryptedID);
|
16 |
| - // const decryptedBytes = CryptoJS.AES.decrypt( |
17 |
| - // encryptedID, |
18 |
| - // process.env.CRYPTOJS_SECRET |
19 |
| - // ); |
20 |
| - // console.log(decryptedBytes); |
21 |
| - // const decryptedID = decryptedBytes.toString(CryptoJS.enc.Utf8); |
| 22 | + console.log(encryptedTime); |
| 23 | + //decrypt ID and Time |
22 | 24 | const decryptedID = decrypt(encryptedID);
|
23 |
| - console.log("decryptedID : ", decryptedID); |
| 25 | + const decryptedTime = decrypt(encryptedTime); |
| 26 | + console.log("decryptedID : ",decryptedID," decryptedTime : ",decryptedTime); |
24 | 27 | const user = await User.findById(decryptedID).exec();
|
25 | 28 | if (user) {
|
| 29 | + const timeElapsed = (Date.now() - decryptedTime) / (1000 * 60); //in minutes; |
26 | 30 | console.log(user);
|
27 |
| - user.emailVerified = true; |
28 |
| - user.save(); |
29 |
| - console.log("email verified"); |
30 |
| - res.redirect('home'); |
31 |
| - }else{ |
32 |
| - res.status(400).send({error:"Invalid request!"}); |
| 31 | + if (timeElapsed < process.env.EMAIL_LINK_VALIDITY) { |
| 32 | + //email link is clicked in valid time duration |
| 33 | + user.emailVerified = true; |
| 34 | + user.save(); |
| 35 | + console.log("email verified"); |
| 36 | + res.redirect("home"); |
| 37 | + } else { |
| 38 | + //link not clicked in valid time duration |
| 39 | + res.render("sentEmailLinkAgain"); |
| 40 | + } |
| 41 | + } else { |
| 42 | + res.status(400).send({ error: "Invalid request!" }); |
33 | 43 | }
|
34 |
| - }else{ |
35 |
| - //domain didn't matched |
36 |
| - //now we need to reset req.session.host, req.session.protocol |
37 |
| - req.session.protocol = null; |
38 |
| - req.session.host = null; |
39 |
| - res.status(400).send({error:"Invalid request!"}); |
| 44 | + } else { |
| 45 | + //domain didn't matched |
| 46 | + //now we need to reset req.session.host, req.session.protocol |
| 47 | + req.session.protocol = null; |
| 48 | + req.session.host = null; |
| 49 | + res.status(400).send({ error: "Invalid request!" }); |
40 | 50 | }
|
41 | 51 | };
|
42 | 52 | module.exports = verifyEmail;
|
0 commit comments