From e397ac6bb885b743199f065052a76561b0c7b499 Mon Sep 17 00:00:00 2001 From: talksik Date: Wed, 8 Jun 2022 05:44:29 -0500 Subject: [PATCH] cleanup organizing and stuff --- packages/api/nodemon.json | 2 +- packages/api/package.json | 3 +- packages/api/{ => src}/config/config.ts | 0 packages/api/{ => src}/index.ts | 3 +- packages/api/src/middleware/auth.ts | 36 +++++++++++++++++++ packages/api/{ => src}/repository/db.ts | 0 .../api/{ => src}/services/SocketService.ts | 3 ++ .../api/{ => src}/services/UserService.ts | 0 yarn.lock | 7 ++++ 9 files changed, 51 insertions(+), 3 deletions(-) rename packages/api/{ => src}/config/config.ts (100%) rename packages/api/{ => src}/index.ts (89%) create mode 100644 packages/api/src/middleware/auth.ts rename packages/api/{ => src}/repository/db.ts (100%) rename packages/api/{ => src}/services/SocketService.ts (87%) rename packages/api/{ => src}/services/UserService.ts (100%) diff --git a/packages/api/nodemon.json b/packages/api/nodemon.json index 4d568b9..7a2e3ed 100644 --- a/packages/api/nodemon.json +++ b/packages/api/nodemon.json @@ -1,6 +1,6 @@ { "ignore": ["**/*.test.ts", "**/*.spec.ts", "node_modules"], - "watch": ["./", "../core"], + "watch": ["./src", "../core"], "exec": "npm run start:dev", "ext": "ts" } diff --git a/packages/api/package.json b/packages/api/package.json index 9b70607..309c75c 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -6,7 +6,7 @@ "scripts": { "core": "rm -rf ./core && cp -r ../core/src ./core/", "dev": "NODE_ENV=development nodemon", - "start:dev": "ts-node index.ts", + "start:dev": "ts-node ./src/index.ts", "lint": "eslint --ext .ts,.tsx .", "build": "npm run lint && tsc -p .", "start": "node dist/index.js", @@ -26,6 +26,7 @@ "dependencies": { "@sentry/node": "^7.0.0", "@sentry/tracing": "^7.0.0", + "@types/jsonwebtoken": "^8.5.8", "axios": "^0.26.1", "cors": "^2.8.5", "express": "^4.17.3", diff --git a/packages/api/config/config.ts b/packages/api/src/config/config.ts similarity index 100% rename from packages/api/config/config.ts rename to packages/api/src/config/config.ts diff --git a/packages/api/index.ts b/packages/api/src/index.ts similarity index 89% rename from packages/api/index.ts rename to packages/api/src/index.ts index a6c626a..3954d4e 100644 --- a/packages/api/index.ts +++ b/packages/api/src/index.ts @@ -7,6 +7,7 @@ import * as Tracing from '@sentry/tracing'; import express, { Application, NextFunction, Request, Response } from 'express'; import InitializeWs from './services/SocketService'; +import NirvanaResponse from '@nirvana/core/responses/nirvanaResponse'; import cors from 'cors'; import morgan from 'morgan'; @@ -23,7 +24,7 @@ app.use((err: Error, req: Request, res: Response, next: NextFunction) => { app.use((err: Error, req: Request, res: Response, next: NextFunction) => { res.status(500); - res.render('error', { error: err }); + res.json(new NirvanaResponse(undefined, err, err.message)); }); app.get('/', (req: Request, res: Response) => { diff --git a/packages/api/src/middleware/auth.ts b/packages/api/src/middleware/auth.ts new file mode 100644 index 0000000..d32fd99 --- /dev/null +++ b/packages/api/src/middleware/auth.ts @@ -0,0 +1,36 @@ +import { NextFunction, Request, Response } from 'express'; +// eslint-disable-next-line @typescript-eslint/no-var-requires +import jwt, { JwtPayload } from 'jsonwebtoken'; + +import environmentVariables from '../config/config'; + +// used by specific routes that need to authentication +export const authCheck = async (req: Request, res: Response, next: NextFunction) => { + try { + const { authorization } = req.headers; + + if (!authorization) { + throw Error('No provided header'); + } + + // verify jwt token with our api secret + const decoded: string | JwtPayload = jwt.verify( + authorization, + environmentVariables.JWT_TOKEN_SECRET, + ); + + res.locals.userInfo = decoded as JwtClaims; + + next(); + } catch (error) { + res.status(401).send('unauthorized'); + } +}; + +export interface JwtClaims { + userId: string; + googleUserId: string; + picture: string; + email: string; + name: string; +} diff --git a/packages/api/repository/db.ts b/packages/api/src/repository/db.ts similarity index 100% rename from packages/api/repository/db.ts rename to packages/api/src/repository/db.ts diff --git a/packages/api/services/SocketService.ts b/packages/api/src/services/SocketService.ts similarity index 87% rename from packages/api/services/SocketService.ts rename to packages/api/src/services/SocketService.ts index a5d8f49..b960ba9 100644 --- a/packages/api/services/SocketService.ts +++ b/packages/api/src/services/SocketService.ts @@ -1,3 +1,5 @@ +import { JwtClaims } from '../middleware/auth'; + export default function InitializeWs(io: any) { console.log('initializing web sockets'); @@ -22,5 +24,6 @@ export default function InitializeWs(io: any) { }) .on('connection', (socket: any) => { console.log(`connected`, socket.id); + const userInfo: JwtClaims = socket.userInfo; }); } diff --git a/packages/api/services/UserService.ts b/packages/api/src/services/UserService.ts similarity index 100% rename from packages/api/services/UserService.ts rename to packages/api/src/services/UserService.ts diff --git a/yarn.lock b/yarn.lock index 160f5b5..80f66a3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1398,6 +1398,13 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== +"@types/jsonwebtoken@^8.5.8": + version "8.5.8" + resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz#01b39711eb844777b7af1d1f2b4cf22fda1c0c44" + integrity sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A== + dependencies: + "@types/node" "*" + "@types/keyv@*": version "3.1.4" resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6"