1+ const nodeMailer = require ( "nodemailer" ) ;
2+
13const User = require ( "../models/user.model" ) ;
24
35const generateToken = require ( "../utils/authMethods.utils" ) . generateAccessToken ;
46const hashPassword = require ( "../utils/authMethods.utils" ) . hashPassword ;
57const checkPassword = require ( "../utils/authMethods.utils" ) . checkPassword ;
68
9+ const transporter = nodeMailer . createTransport ( {
10+ service : "gmail" ,
11+ auth : {
12+ user : process . env . GMAIL_USER ,
13+ pass : process . env . GMAIL_PASS ,
14+ } ,
15+ } ) ;
16+
717exports . postLoginController = ( req , res ) => {
818 const email = req . body . email ;
919 const password = req . body . password ;
@@ -59,6 +69,7 @@ exports.postRegisterController = (req, res) => {
5969 const email = req . body . email ;
6070 const password = req . body . password ;
6171 const confirmPassword = req . body . confirmPassword ;
72+ const verifyToken = require ( "crypto" ) . randomBytes ( 64 ) . toString ( "hex" ) ;
6273
6374 if ( password === confirmPassword ) {
6475 hashPassword ( password ) . then ( ( hashedPass ) => {
@@ -79,10 +90,27 @@ exports.postRegisterController = (req, res) => {
7990 username,
8091 email,
8192 password : hashedPass ,
93+ active : false ,
94+ token : verifyToken ,
8295 } ) ;
8396 user
8497 . save ( )
8598 . then ( ( result ) => {
99+ const host = req . get ( "host" ) ;
100+ const link = `http://${ host } /verify?token=${ verifyToken } ` ;
101+ const mailOptions = {
102+ from : "noreply@techoptimum.org" ,
103+ to : email ,
104+ subject : "Verify your email" ,
105+ html : `<h1>Verify your email</h1><br><a href="${ link } ">Click here to verify your email</a>` ,
106+ } ;
107+ transporter . sendMail ( mailOptions , ( err , info ) => {
108+ if ( err ) {
109+ console . log ( err ) ;
110+ } else {
111+ console . log ( info ) ;
112+ }
113+ } ) ;
86114 return res
87115 . cookie ( "token" , token , {
88116 maxAge : 1000 * 60 * 60 ,
@@ -134,3 +162,44 @@ exports.postRegisterController = (req, res) => {
134162exports . postLogoutController = ( req , res ) => {
135163 res . clearCookie ( "token" ) . status ( 200 ) . json ( { success : true } ) ;
136164} ;
165+
166+ exports . getVerifyController = ( req , res ) => {
167+ const token = req . query . token ;
168+ User . findOne ( {
169+ token : token ,
170+ } )
171+ . then ( ( users ) => {
172+ if ( users . active === false ) {
173+ users . active = true ;
174+ users
175+ . save ( )
176+ . then ( ( result ) => {
177+ return res . status ( 200 ) . json ( {
178+ success : true ,
179+ msg : "Email verified." ,
180+ } ) ;
181+ } )
182+ . catch ( ( err ) => {
183+ console . log ( err ) ;
184+ return res . status ( 505 ) . json ( {
185+ success : false ,
186+ errType : "dberr" ,
187+ msg : "Internal Server Error." ,
188+ } ) ;
189+ } ) ;
190+ } else {
191+ return res . status ( 200 ) . json ( {
192+ success : true ,
193+ msg : "Email already verified." ,
194+ } ) ;
195+ }
196+ } )
197+ . catch ( ( err ) => {
198+ console . log ( err ) ;
199+ return res . status ( 505 ) . json ( {
200+ success : false ,
201+ errType : "dberr" ,
202+ msg : "Internal Server Error." ,
203+ } ) ;
204+ } ) ;
205+ } ;
0 commit comments