From 835150239c0ec1d72da09483b1e7cf2bc669e237 Mon Sep 17 00:00:00 2001
From: Ramiro <rbentancor@globaluy.com>
Date: Thu, 14 Oct 2021 22:46:41 -0300
Subject: [PATCH] JWT tokens

---
 dist/Controllers/UserCotroller.js     |  20 +++++-
 dist/Controllers/UserCotroller.js.map |   2 +-
 package-lock.json                     | 100 ++++++++++++++++++++++++++
 package.json                          |   2 +
 src/Controllers/UserCotroller.ts      |  23 ++++--
 src/config/config.ts                  |   4 ++
 src/middlewares/token.middleware.ts   |  28 ++++++++
 7 files changed, 171 insertions(+), 8 deletions(-)
 create mode 100644 src/middlewares/token.middleware.ts

diff --git a/dist/Controllers/UserCotroller.js b/dist/Controllers/UserCotroller.js
index 8a26143..5045775 100644
--- a/dist/Controllers/UserCotroller.js
+++ b/dist/Controllers/UserCotroller.js
@@ -13,7 +13,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
 };
 Object.defineProperty(exports, "__esModule", { value: true });
 const express_1 = require("express");
+const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
 const UserService_1 = __importDefault(require("../Services/UserService"));
+const config_1 = require("../config/config");
+const token_middleware_1 = require("../middlewares/token.middleware");
 const router = (0, express_1.Router)();
 const listAll = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
     try {
@@ -153,13 +156,26 @@ const active = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
 const login = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
     try {
         const logged = yield UserService_1.default.login(req.body);
-        return res.status(200).send(logged);
+        const token = jsonwebtoken_1.default.sign({
+            user: logged.get('id'),
+            role: logged.get('type'),
+        }, config_1.secret.auth, {
+            expiresIn: '2d',
+        });
+        return res.status(200).send({
+            token,
+            user: logged,
+        });
     }
     catch (error) {
+        console.log(error);
         const e = error;
         return res.status(400).json({ error: e.message });
     }
 });
+router.route('/login')
+    .post(login);
+router.use('/', token_middleware_1.authorized);
 router.route('/')
     .get(listAll)
     .post(create);
@@ -186,7 +202,5 @@ router.route('/:id/admin')
     .put(giveAdminPermission);
 router.route('/:id/client')
     .put(removeAdminPermission);
-router.route('/login')
-    .post(login);
 exports.default = router;
 //# sourceMappingURL=UserCotroller.js.map
\ No newline at end of file
diff --git a/dist/Controllers/UserCotroller.js.map b/dist/Controllers/UserCotroller.js.map
index 0ff3f55..7232d54 100644
--- a/dist/Controllers/UserCotroller.js.map
+++ b/dist/Controllers/UserCotroller.js.map
@@ -1 +1 @@
-{"version":3,"file":"UserCotroller.js","sourceRoot":"","sources":["../../src/Controllers/UserCotroller.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"UserCotroller.js","sourceRoot":"","sources":["../../src/Controllers/UserCotroller.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 0dfddcc..9814bc0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1343,6 +1343,15 @@
       "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
       "dev": true
     },
+    "@types/jsonwebtoken": {
+      "version": "8.5.5",
+      "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.5.tgz",
+      "integrity": "sha512-OGqtHQ7N5/Ap/TUwO6IgHDuLiAoTmHhGpNvgkCm/F4N6pKzx/RBSfr2OXZSwC6vkfnsEdb6+7DNZVtiXiwdwFw==",
+      "dev": true,
+      "requires": {
+        "@types/node": "*"
+      }
+    },
     "@types/mime": {
       "version": "1.3.2",
       "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
@@ -2158,6 +2167,11 @@
         "node-int64": "^0.4.0"
       }
     },
+    "buffer-equal-constant-time": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
+      "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
+    },
     "buffer-from": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -2985,6 +2999,14 @@
       "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
       "dev": true
     },
+    "ecdsa-sig-formatter": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
+      "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+      "requires": {
+        "safe-buffer": "^5.0.1"
+      }
+    },
     "editorconfig": {
       "version": "0.15.3",
       "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz",
@@ -6733,6 +6755,30 @@
         "graceful-fs": "^4.1.6"
       }
     },
+    "jsonwebtoken": {
+      "version": "8.5.1",
+      "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
+      "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
+      "requires": {
+        "jws": "^3.2.2",
+        "lodash.includes": "^4.3.0",
+        "lodash.isboolean": "^3.0.3",
+        "lodash.isinteger": "^4.0.4",
+        "lodash.isnumber": "^3.0.3",
+        "lodash.isplainobject": "^4.0.6",
+        "lodash.isstring": "^4.0.1",
+        "lodash.once": "^4.0.0",
+        "ms": "^2.1.1",
+        "semver": "^5.6.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+        }
+      }
+    },
     "jsx-ast-utils": {
       "version": "3.2.1",
       "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz",
@@ -6743,6 +6789,25 @@
         "object.assign": "^4.1.2"
       }
     },
+    "jwa": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
+      "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
+      "requires": {
+        "buffer-equal-constant-time": "1.0.1",
+        "ecdsa-sig-formatter": "1.0.11",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "jws": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+      "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
+      "requires": {
+        "jwa": "^1.4.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
     "keyv": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
@@ -6935,11 +7000,41 @@
       "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
       "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
     },
+    "lodash.includes": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
+      "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8="
+    },
+    "lodash.isboolean": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
+      "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY="
+    },
     "lodash.isequal": {
       "version": "4.5.0",
       "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
       "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
     },
+    "lodash.isinteger": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
+      "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M="
+    },
+    "lodash.isnumber": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
+      "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w="
+    },
+    "lodash.isplainobject": {
+      "version": "4.0.6",
+      "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+      "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
+    },
+    "lodash.isstring": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+      "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE="
+    },
     "lodash.merge": {
       "version": "4.6.2",
       "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
@@ -6951,6 +7046,11 @@
       "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
       "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ=="
     },
+    "lodash.once": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+      "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
+    },
     "lodash.truncate": {
       "version": "4.4.2",
       "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
diff --git a/package.json b/package.json
index f00e3bc..2dbd459 100644
--- a/package.json
+++ b/package.json
@@ -10,6 +10,7 @@
     "dotenv": "^10.0.0",
     "express": "^4.17.1",
     "gulp-eslint": "^6.0.0",
+    "jsonwebtoken": "^8.5.1",
     "mysql2": "^2.3.0",
     "openapi-types": "^9.3.0",
     "sequelize": "^6.6.5",
@@ -23,6 +24,7 @@
     "@types/bluebird": "^3.5.36",
     "@types/cors": "^2.8.12",
     "@types/express": "^4.17.13",
+    "@types/jsonwebtoken": "^8.5.5",
     "@types/node": "^16.9.6",
     "@types/swagger-jsdoc": "^6.0.1",
     "@types/swagger-ui-express": "^4.1.3",
diff --git a/src/Controllers/UserCotroller.ts b/src/Controllers/UserCotroller.ts
index 09ce8e7..c35f83a 100644
--- a/src/Controllers/UserCotroller.ts
+++ b/src/Controllers/UserCotroller.ts
@@ -1,7 +1,10 @@
 import { Request, Response, Router } from 'express';
+import jwt from 'jsonwebtoken';
 import { User } from '../models/users.model';
 import Paginator from '../interfaces/paginator.interface';
 import UserService from '../Services/UserService';
+import { secret } from '../config/config';
+import { authorized } from '../middlewares/token.middleware';
 
 const router = Router();
 
@@ -143,13 +146,28 @@ const active = async (req: Request, res: Response): Promise<Response> => {
 const login = async (req: Request, res: Response): Promise<Response> => {
   try {
     const logged: User = await UserService.login(req.body);
-    return res.status(200).send(logged);
+    const token = jwt.sign({
+      user: logged.get('id'),
+      role: logged.get('type'),
+    }, secret.auth, {
+      expiresIn: '2d',
+    });
+    return res.status(200).send({
+      token,
+      user: logged,
+    });
   } catch (error) {
+    console.log(error);
     const e = error as Error;
     return res.status(400).json({ error: e.message });
   }
 };
 
+router.route('/login')
+  .post(login);
+
+router.use('/', authorized);
+
 router.route('/')
   .get(listAll)
   .post(create);
@@ -188,7 +206,4 @@ router.route('/:id/admin')
 router.route('/:id/client')
   .put(removeAdminPermission);
 
-router.route('/login')
-  .post(login);
-
 export default router;
diff --git a/src/config/config.ts b/src/config/config.ts
index 2c783cc..2da993b 100644
--- a/src/config/config.ts
+++ b/src/config/config.ts
@@ -8,3 +8,7 @@ export const development = {
   dialect: 'mysql',
   logging: false,
 };
+
+export const secret = {
+  auth: 'HN$t@2*?mDusFsT!',
+};
diff --git a/src/middlewares/token.middleware.ts b/src/middlewares/token.middleware.ts
new file mode 100644
index 0000000..450c978
--- /dev/null
+++ b/src/middlewares/token.middleware.ts
@@ -0,0 +1,28 @@
+import { Response, NextFunction } from 'express';
+
+import jwt from 'jsonwebtoken';
+
+import { secret } from '../config/config';
+
+const authorized = async (req: any, res: Response, next: NextFunction): Promise<void> => {
+  const token: string = req.headers.authorization || '';
+  if (token) {
+    jwt.verify(token, secret.auth, (error: Error, decoded: {id: number; type: number}) => {
+      if (error) {
+        res.status(401).send('auth failed');
+      } else {
+        req.auth = {
+          userId: decoded.id,
+          userType: decoded.type,
+        };
+        next();
+      }
+    });
+  } else {
+    res.status(400).send('auth token not supplied');
+  }
+};
+
+export {
+  authorized,
+};
-- 
GitLab