Retrieve a socket by their token/account_id
authorxangelo <git@xangelo.ca>
Tue, 7 Jun 2022 04:07:52 +0000 (00:07 -0400)
committerxangelo <git@xangelo.ca>
Tue, 7 Jun 2022 04:07:52 +0000 (00:07 -0400)
src/lib/server.ts

index 6615487bf31666301eba38268671f82e7af56e11..90ccf484bfbdf9a959039143a17fb3b7abacce46 100644 (file)
@@ -5,8 +5,7 @@ import { merge } from 'lodash';
 import bodyParser from 'body-parser';
 import { ExpressAdapter } from '@bull-board/express';
 import http from 'http';
-import { Server } from 'socket.io';
-import {HttpError} from '../errors';
+import { Server, Socket } from 'socket.io';
 
 type AuthInfo = {
        authInfo: { 
@@ -59,6 +58,19 @@ export class HttpServer {
     }
   }
 
+  getSocketFromAuthenticatedUser(authInfo: {token: string, accountId: string}): Socket | null {
+    let socket: Socket;
+
+    this.ws.of('/').sockets.forEach(s => {
+      const auth = this.authFromUrl(s.request.headers['referer']);
+      if (auth.authInfo.accountId === authInfo.accountId && auth.authInfo.token === authInfo.token) {
+        socket = s;
+      }
+    });
+
+    return socket;
+  }
+
        wrap<I, O>(handler: HttpHandler<I, O>, hxEvents: string) {
     const self = this;
                return async function (req: Request, res: Response) {