Skip to content

Commit 7777afd

Browse files
committed
Created socket session middleware for sockets
1 parent d2d791b commit 7777afd

8 files changed

Lines changed: 277 additions & 7 deletions

File tree

services/devicecontrol/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
"pino-loki": "^3.0.0",
3434
"prom-client": "^15.1.3",
3535
"redis": "^5.10.0",
36+
"socket.io": "^4.8.3",
3637
"tsx": "^4.21.0"
3738
},
3839
"devDependencies": {
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import { CreateVerifyAccessTokenInstance } from "@services/common/helpers"
2+
import Logger from "../config/logger";
3+
4+
export const VerifyAccessToken = CreateVerifyAccessTokenInstance(Logger);
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
export * from "./generate_pairing_code"
2-
export * from "./device_tokens"
2+
export * from "./device_tokens"
3+
export * from "./access_tokens"
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import type { Request, Response, NextFunction } from 'express';
22
import logger from '../config/logger';
33
import { ErrorHandlerMiddleware } from '@services/common/middleware';
4-
const ErrorHandler = new ErrorHandlerMiddleware(logger).middleware;
5-
export default ErrorHandler;
4+
export const ErrorHandler = new ErrorHandlerMiddleware(logger).middleware;
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11

2-
export { default as ValidSessionMiddleware } from "./valid_session_middleware";
3-
export { default as ErrorHandlerMiddleware } from "./error_handler_middleware";
2+
export * from "./valid_session_middleware";
3+
export * from "./error_handler_middleware";
4+
export * from "./valid_socket_session_middleware"
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
import { SessionMiddleware } from '@services/common/middleware';
22
import logger from '../config/logger';
3-
const ValidSessionMiddleware = new SessionMiddleware(logger).middleware;
4-
export default ValidSessionMiddleware;
3+
export const ValidSessionMiddleware = new SessionMiddleware(logger).middleware;
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import type { Socket, Event } from "socket.io"
2+
import { VerifyAccessToken } from "../helpers"
3+
import logger from "../config/logger";
4+
5+
6+
7+
export async function ValidSocketSessionMiddleware(socket: Socket, next: (err?: Error) => void) {
8+
try {
9+
const token = socket.handshake.auth.token;
10+
if (!token) {
11+
return next(new Error("Authentication error: No token provided"));
12+
}
13+
const payload = await VerifyAccessToken(token);
14+
if (!payload) {
15+
return next(new Error("Authentication error: Invalid token"));
16+
}
17+
(socket as any).user = payload; // cba to extend for user payload
18+
const tokenExpiry = payload.exp * 1000 - Date.now();
19+
setTimeout(() => { // disconnect socket when token expires - security measure
20+
socket.disconnect(true);
21+
}, tokenExpiry);
22+
next();
23+
} catch (err) {
24+
logger.error({ error: err }, "Error in ValidSocketSessionMiddleware:");
25+
next(new Error("Authentication error"));
26+
}
27+
}

services/package-lock.json

Lines changed: 238 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)