From d8f7962a458b4a30ae8ea5c4234aa43781f42105 Mon Sep 17 00:00:00 2001
From: Eduardo Mathias <ems19@inf.ufpr.br>
Date: Mon, 15 May 2023 11:57:36 -0300
Subject: [PATCH] [ADD] ResetToken Postgres methods

---
 src/libs/api_mongo.txt            |   5 +-
 src/libs/middlewares/passport.js  |   6 +-
 src/libs/models/resetToken.js     |   2 +-
 src/libs/routes_v1/resetToken.js  | 114 +++++++++++++++---------------
 src/libs/routes_v1/user.js        |   8 +--
 src/libs/routes_v1/verifyToken.js |   2 +-
 6 files changed, 69 insertions(+), 68 deletions(-)

diff --git a/src/libs/api_mongo.txt b/src/libs/api_mongo.txt
index d43ea00a..58f65965 100644
--- a/src/libs/api_mongo.txt
+++ b/src/libs/api_mongo.txt
@@ -1,5 +1,6 @@
 *downloads.js
-*resetToken.js
+*resetToken.js (V)
+*pqr.js
 *simulation.js
 *user.js (V)
-*verifyToken.js
+*verifyToken.js (V)
diff --git a/src/libs/middlewares/passport.js b/src/libs/middlewares/passport.js
index 82f21de5..a63cd150 100644
--- a/src/libs/middlewares/passport.js
+++ b/src/libs/middlewares/passport.js
@@ -38,10 +38,10 @@ passport.use(new BearerStrategy(async (accessToken, done) => {
     }
 
     if (Math.round((Date.now() - token.created) / 1000) > config.security.tokenLife) {
-        AccessToken.destroy({ token: accessToken }).then((err) => {
+        AccessToken.destroy({where:{ token: accessToken} }).catch(function (err) {
             if (err) {
-                console.log("ERRO remove Token")
-                return done(err);
+                log.error(err);
+                return next({ err });
             }
         });
 
diff --git a/src/libs/models/resetToken.js b/src/libs/models/resetToken.js
index 5398e9f4..21e5915e 100644
--- a/src/libs/models/resetToken.js
+++ b/src/libs/models/resetToken.js
@@ -27,7 +27,7 @@ var ResetToken = db.define("ResetToken",{
     {timestamps: false}
 );
 
-ResetToken.hasExpired = function () {
+ResetToken.prototype.hasExpired = function () {
     var now = new Date();
     return (now - this.createdAt) > 86400; //Expire if token is 1 day old
 };
diff --git a/src/libs/routes_v1/resetToken.js b/src/libs/routes_v1/resetToken.js
index 3d67a1e2..7c758410 100644
--- a/src/libs/routes_v1/resetToken.js
+++ b/src/libs/routes_v1/resetToken.js
@@ -10,72 +10,72 @@ const ResetToken = require(`${libs}/models/resetToken`);
 
 const User = require(`${libs}/models/user`);
 
-resetTokenApp.get('/:token', (req, res, next) => {
+resetTokenApp.get('/:token', async (req, res, next) => {
     let token = req.params.token;
-    ResetToken.findOne({token: token}, (err, rToken) => {
-        if(err) {
+    let rToken = await ResetToken.findOne({where:{ token: token} }).catch(function (err) {
+        if (err) {
             log.error(err);
-            return next(err);
+            return next({ err });
         }
-        if(!rToken) {
-            // TODO: generate new reset token
-            res.statusCode = 404;
-            return next({msg: 'Token not found', status:404});
-        }
-        if (rToken.hasExpired()) {
-            res.statusCode = 410;
-            ResetToken.remove({token: token}, (err) => {
-                if(err) {
-                    log.error(err);
-                    next(err);
-                }
-            })
-            return next({msg: 'Token expired', status: 410});
-        }
-        User.findByPk(rToken.userId, (err, user) => {
-            if(err) {
+    })
+    if (!rToken) {
+        res.statusCode = 404;
+        return next({ msg: 'Token not found', status: 404 });
+    }
+    if (rToken.hasExpired()) {
+        res.statusCode = 410;
+        await ResetToken.remove({where:{ token: token}}).catch(function (err) {
+            if (err) {
                 log.error(err);
-                next(err);
+                return next({ err });
             }
-            let u = user.toObject();
-            delete u.salt;
-            delete u.hashedPassword;
-            res.json({user: u});
-        });
-    });
+        })
+        return next({ msg: 'Token expired', status: 410 });
+    }
+    let _user = await User.findByPk(rToken.user_id).catch(function (err) {
+        if (err) {
+            log.error(err);
+            return next({ err });
+        }
+    })
+    let u = _user.toJSON();
+    delete u.salt;
+    delete u.hashed_password;
+    res.json({ user: u });
 });
-resetTokenApp.post('/:token', (req, res, next) => {
+
+resetTokenApp.post('/:token', async (req, res, next) => {
     let token = req.params.token;
-    ResetToken.findOne({token: token}, (err, rToken) => {
-        if(err) {
+    let rToken = await ResetToken.findOne({where:{ token: token}}).catch(function (err) {
+        if (err) {
             log.error(err);
-            return next(err);
+            return next({ err });
         }
-        if(!rToken) {
-            res.statusCode = 404;
-            return next({msg: 'Token not found', status:404});
+    })
+    if (!rToken) {
+        res.statusCode = 404;
+        return next({ msg: 'Token not found', status: 404 });
+    }
+    let _user = await User.findByPk(rToken.user_id).catch(function (err) {
+        if (err) {
+            log.error(err);
+            return next({ err });
         }
-        User.findByPk(rToken.userId, (err, user) => {
-            if(err) {
-                log.error(err);
-                next(err);
-            }
-            user.password = req.body.password;
-            user.save((err) => {
-                if(err) {
-                    log.error(err);
-                    next(err);
-                }
-                ResetToken.remove({token: token}, (err) => {
-                    if(err) {
-                        log.error(err);
-                        next(err);
-                    }
-                })
-                res.json({msg: "Senha alterada com sucesso"});
-            })
-        });
-    });
-})
+    })
+    await _user.update({password:req.body.password});
+    _user.save().catch(function (err) {
+        if (err) {
+            log.error(err);
+            return next({ err });
+        }
+    })
+    await ResetToken.destroy({where:{token: token} }).catch(function (err) {
+        if (err) {
+            log.error(err);
+            return next({ err });
+        }
+    })
+    res.json({ msg: "Senha alterada com sucesso" });
+});
 
 module.exports = resetTokenApp;
diff --git a/src/libs/routes_v1/user.js b/src/libs/routes_v1/user.js
index 53f3ef54..d02edd84 100644
--- a/src/libs/routes_v1/user.js
+++ b/src/libs/routes_v1/user.js
@@ -94,7 +94,7 @@ userApp.get('/', passport.authenticate('bearer', {session: false}), (req, res, n
 */
 
 userApp.get('/me', passport.authenticate('bearer', { session: false }), (req, res, next) => {
-  let u = req.user;
+  let u = req.user.toJSON();
   delete u.hashed_password;
   delete u.salt;
   req.result = u;
@@ -107,7 +107,7 @@ userApp.get('/:id', (req, res, next) => {
       res.statusCode = 404;
       res.json({ msg: "O usuário não está cadastrado" });
     } else {
-      let u = user;
+      let u = user.toJSON();
       delete u.hashed_password;
       delete u.salt;
       req.result = u;
@@ -256,8 +256,8 @@ userApp.put('/:id', passport.authenticate('bearer', { session: false }), async (
       log.error(err);
       return next({ message: 'Erro ao atualizar usuário' });
     }})
-  let u = user;
-  delete u.hashedPassword;
+  let u = user.toJSON();
+  delete u.hashed_password;
   delete u.salt;
   delete u.password;
   res.json({ user: u });
diff --git a/src/libs/routes_v1/verifyToken.js b/src/libs/routes_v1/verifyToken.js
index d1c75b5f..81731fe3 100644
--- a/src/libs/routes_v1/verifyToken.js
+++ b/src/libs/routes_v1/verifyToken.js
@@ -45,7 +45,7 @@ verifyTokenApp.get('/:token', async (req, res, next) => {
             next(err);
         }
     });
-    let u = _user;
+    let u = _user.toJSON();
     delete u['salt'];
     delete u['hashed_password'];
     res.json({ msg: 'User verified', u });
-- 
GitLab