import logger from '../utils/logger' import dbtools from '../utils/dbtools' import cookie from 'cookie' import { testUser } from './auth.middleware' interface Options { userDB: any } export default function SocketAuth(options: Options): any { const { userDB } = options return (socket, next) => { try { const cookies = cookie.parse(socket.handshake.headers.cookie || '') const sessionID = cookies.sessionID if (process.env.NS_NOUSER) { socket.user = testUser next() return } if (!sessionID) { next(new Error('Not authenticated, please log in')) return } const user = GetUserBySessionID(userDB, sessionID) if (!user) { next(new Error('Not authenticated, please log in')) return } socket.user = user next() } catch (e) { next(new Error('Authentication server error')) console.error('Authentication server error') console.error(e) } } } function GetUserBySessionID(db: any, sessionID: string) { logger.DebugLog(`Getting user from db`, 'auth', 2) const session = dbtools.Select(db, 'sessions', { id: sessionID, })[0] if (!session) { return } const user = dbtools.Select(db, 'users', { id: session.userID, })[0] if (user) { return user } }