@@ -3,6 +3,7 @@ import { StatusCodes } from "http-status-codes";
33import { Config , EnvironmentEnum } from "./config" ;
44import { isTest } from "./utilities" ;
55import "./firebase" ;
6+ import jsonwebtoken , { TokenExpiredError } from "jsonwebtoken" ;
67
78// import databaseMiddleware from "./middleware/database-middleware";
89// import customCors from "./middleware/cors-middleware";
@@ -27,6 +28,7 @@ import shiftsRouter from "./services/shifts/shifts-router";
2728import leaderboardRouter from "./services/leaderboard/leaderboard-router" ;
2829
2930import cors from "cors" ;
31+ import { JwtPayloadValidator } from "./services/auth/auth-models" ;
3032
3133const app = express ( ) ;
3234app . enable ( "trust proxy" ) ;
@@ -41,19 +43,34 @@ app.disable("etag");
4143app . use ( cors ( ) ) ;
4244
4345// Logs
44- switch ( Config . ENV ) {
45- case EnvironmentEnum . TESTING :
46- break ;
47- case EnvironmentEnum . DEVELOPMENT :
48- app . use ( morgan ( "dev" ) ) ;
49- break ;
50- case EnvironmentEnum . PRODUCTION :
51- app . use (
52- morgan (
53- ':remote-addr - :remote-user ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"'
54- )
55- ) ;
56- break ;
46+ if ( Config . ENV != EnvironmentEnum . TESTING ) {
47+ morgan . token ( "userid" , ( req , _res ) => {
48+ const jwt = req . headers . authorization ;
49+ if ( ! jwt ) {
50+ return "unauthorized" ;
51+ }
52+
53+ try {
54+ const payloadData = jsonwebtoken . verify (
55+ jwt ,
56+ Config . JWT_SIGNING_SECRET
57+ ) ;
58+ const payload = JwtPayloadValidator . parse ( payloadData ) ;
59+ return payload . userId ;
60+ } catch ( error ) {
61+ if ( error instanceof TokenExpiredError ) {
62+ return "expired-token" ;
63+ }
64+
65+ return "invalid-token" ;
66+ }
67+ } ) ;
68+
69+ app . use (
70+ morgan (
71+ ':remote-addr - :remote-user :userid ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"'
72+ )
73+ ) ;
5774}
5875
5976// Parsing
0 commit comments