summaryrefslogblamecommitdiffstats
path: root/server/lib/socketio.js
blob: 37d20cd59870ae5f08c7abfee23efbade276ebcb (plain) (tree)








































                                                                                                                 
var path = require('path')
var cookie = require('cookie')
var jwt = require('jsonwebtoken')
var io = require('socket.io')({ serveClient: false });

// ############################################################################
// #######################  websocket middleware  #############################

/* global __appdir */
var auth = require(path.join(__appdir, 'lib', 'authentication'))
io.use(function (socket, next){
  socket.request.cookies = cookie.parse(socket.request.headers.cookie || '')
  auth.verifyToken(socket.request, null, next);
})

// ############################################################################
// #######################  websocket listeners  ##############################

io.on('connection', socket => {
  console.log('Socket.io: A user connected.')
  socket.on('disconnect', () => console.log('Socket.io: A user disconnected.'))

  var decodedToken = jwt.decode(socket.request.token, { complete: true })
  var userId = decodedToken.payload.user.id

  socket.join(userId)

  // Join broadcast rooms (TODO: check if user has permission to join those rooms)
  socket.join('broadcast newClient')

  // Notification broadcasts
  socket.on('notifications clearAll', () => socket.to(userId).emit('notifications clearAll'))
  socket.on('notifications newAlert', data => socket.to(userId).emit('notifications newAlert', data))
  socket.on('notifications closeAlert', id => socket.to(userId).emit('notifications closeAlert', id))
  socket.on('notifications resetNewAlertCount', () => socket.to(userId).emit('notifications resetNewAlertCount'))
})

// ############################################################################
// ############################################################################

module.exports = io