| 123456789101112131415161718192021222324252627282930313233343536 |
- const OError = require('@overleaf/o-error')
- const { EventEmitter } = require('events')
- const { MissingSessionError } = require('./Errors')
- module.exports = function (io, sessionStore, cookieParser, cookieName) {
- const missingSessionError = new MissingSessionError()
- const sessionSockets = new EventEmitter()
- function next(error, socket, session) {
- sessionSockets.emit('connection', error, socket, session)
- }
- io.on('connection', function (socket) {
- const req = socket.handshake
- cookieParser(req, {}, function () {
- const sessionId = req.signedCookies && req.signedCookies[cookieName]
- if (!sessionId) {
- return next(missingSessionError, socket)
- }
- sessionStore.get(sessionId, function (error, session) {
- if (error) {
- OError.tag(error, 'error getting session from sessionStore', {
- sessionId,
- })
- return next(error, socket)
- }
- if (!session) {
- return next(missingSessionError, socket)
- }
- next(null, socket, session)
- })
- })
- })
- return sessionSockets
- }
|