var app = require('express')();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
var ious = require('ious')(io);
var cookieParser = require('cookie-parser');
var passport = require('passport');
var JwtStrategy = require('passport-jwt').Strategy;
passport.use(new JwtStrategy({
secretOrKey: 'YourSecretIsSafeWithMe',
jwtFromRequest: function(request) {
var token = null;
if (request && request.cookies) {
token = request.cookies.jwt;
}
return token;
}
}, function (credentials, done) {
require('./user').findOne({ id: credentials.userId }, function(error, user) {
if(error) {
return done(error);
}
if(user) {
return done(null, user);
}
done(null, false);
});
}));
ious(cookieParser());
ious(passport.intialize());
io.on('connection', function (socket) {
socket.on('do something as an admin', function (callback) {
passport.authenticate('jwt', function (error, user, info) {
if (error) {
return callback(error);
}
if (info instanceof Error) {
return callback(info);
}
if (!user || user.role !== 'admin') {
return callback('User Not Authenticated');
}
return require('./admin').doSomething(callback);
})(socket.request, socket.request.res, callback);
});
});