initial commit after fork of passport-socketio

This commit is contained in:
José F. Romaniello
2014-01-13 16:00:21 -03:00
parent aa678b4dd9
commit 14a34ae380
9 changed files with 131 additions and 391 deletions

View File

@ -1,26 +1,21 @@
var fixture = require('./fixture'),
request = require('request'),
setSocketIOHandshakeCookies = require('./fixture/setSocketIOHandshakeCookies');
var fixture = require('./fixture');
var request = require('request');
var io = require('socket.io-client');
describe('authorizer', function () {
//start and stop the server
//start and stop the server
before(fixture.start);
after(fixture.stop);
//create a new session for every test
beforeEach(function(){
this.cookies = request.jar();
setSocketIOHandshakeCookies(this.cookies);
});
describe('when the user is not logged in', function () {
it('should emit error with unauthorized handshake', function (done){
var socket = io.connect('http://localhost:9000', {'force new connection':true});
var socket = io.connect('http://localhost:9000', {
'query': 'token=Booooooooooooooooooooo',
'force new connection': true
});
socket.on('error', function(err){
err.should.eql('handshake unauthorized');
done();
@ -33,19 +28,24 @@ describe('authorizer', function () {
beforeEach(function (done) {
request.post({
jar: this.cookies,
url: 'http://localhost:9000/login',
form: {username: 'jose', password: 'Pa123'}
}, done);
form: { username: 'jose', password: 'Pa123' },
json: true
}, function (err, resp, body) {
this.token = body.token;
done();
}.bind(this));
});
it('should do the handshake and connect', function (done){
var socket = io.connect('http://localhost:9000', {'force new connection':true});
var socket = io.connect('http://localhost:9000', {
'force new connection':true,
'query': 'token=' + this.token
});
socket.on('connect', function(){
done();
}).on('error', done);
});
});
});

View File

@ -1,97 +0,0 @@
var fixture = require('./fixture'),
request = require('request'),
setSocketIOHandshakeCookies = require('./fixture/setSocketIOHandshakeCookies');
var io = require('socket.io-client');
describe('authorizer with success callback', function () {
//stop the server
afterEach(fixture.stop);
//start the server
//create a new session for every test
beforeEach(function(done){
this.cookies = request.jar();
setSocketIOHandshakeCookies(this.cookies);
fixture.start({
success: function(data, accept){
this.accept = accept;
}.bind(this)
}, done);
});
it('should call the success function with accept', function (done){
request.post({
jar: this.cookies,
url: 'http://localhost:9000/login',
form: {username: 'jose', password: 'Pa123'}
}, function(){
io.connect('http://localhost:9000', {'force new connection':true});
setTimeout(function(){
this.accept
.should.be.instanceOf(Function);
done();
}.bind(this), 300);
}.bind(this));
});
it('should not connect until calling the accept function', function (done){
request.post({
jar: this.cookies,
url: 'http://localhost:9000/login',
form: {username: 'jose', password: 'Pa123'}
}, function(){
var connected = false,
socket = io.connect('http://localhost:9000', {'force new connection':true});
socket.on('connect', function(){
connected = true;
}).on('error', done);
setTimeout(function(){
connected.should.be.false;
done();
}.bind(this), 300);
}.bind(this));
});
it('should connect after calling the accept function', function (done){
request.post({
jar: this.cookies,
url: 'http://localhost:9000/login',
form: {username: 'jose', password: 'Pa123'}
}, function(){
var connected = false,
socket = io.connect('http://localhost:9000', {'force new connection':true});
socket.on('connect', function(){
connected = true;
}).on('error', done);
setTimeout(function(){
this.accept(null, true);
setTimeout(function(){
connected.should.be.true;
done();
}, 200);
}.bind(this), 200);
}.bind(this));
});
});

View File

@ -1,68 +1,52 @@
var express = require('express'),
connect = require('connect'),
passport = require('passport'),
http = require('http'),
xtend = require('xtend');
var express = require('express');
var http = require('http');
var socketIo = require('socket.io'),
passportSocketIo = require('../../lib');
var socketIo = require('socket.io');
var socketio_jwt = require('../../lib');
var sessionStore = new connect.session.MemoryStore(),
sessionSecret = 'asdasdsdas1312312',
sessionKey = 'test-session-key',
sessionOptions = {
store: sessionStore,
key: sessionKey,
secret: sessionSecret
};
var jwt = require('jsonwebtoken');
var xtend = require('xtend');
var server;
require('./setupPassport');
exports.start = function (options, callback) {
if(typeof options == 'function'){
callback = options;
options = {
};
}
options.cookieParser = express.cookieParser;
options = {};
}
options = xtend({ secret: 'aaafoo super sercret'}, options);
var app = express();
app.configure(function(){
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.session(sessionOptions));
app.use(passport.initialize());
app.use(passport.session());
this.use(express.json());
this.use(express.urlencoded());
});
app.post('/login', passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/login',
failureFlash: true }));
app.post('/login', function (req, res) {
var profile = {
first_name: 'John',
last_name: 'Doe',
email: 'john@doe.com',
id: 123
};
app.get('/', function(req, res){
if(!req.user){
res.send(401);
}else{
res.json(req.user);
}
// We are sending the profile inside the token
var token = jwt.sign(profile, options.secret, { expiresInMinutes: 60*5 });
res.json({token: token});
});
server = http.createServer(app);
var sio = socketIo.listen(server);
sio.configure(function(){
this.set('authorization', passportSocketIo.authorize(xtend(sessionOptions, options)));
this.set('authorization', socketio_jwt.authorize(options));
this.set('log level', 0);
});
sio.sockets.on('echo', function (m) {

View File

@ -1,20 +0,0 @@
var xmlhttprequest = require('xmlhttprequest');
var originalRequest = xmlhttprequest.XMLHttpRequest;
module.exports = function (jar) {
xmlhttprequest.XMLHttpRequest = function(){
originalRequest.apply(this, arguments);
this.setDisableHeaderCheck(true);
var stdOpen = this.open;
this.open = function() {
stdOpen.apply(this, arguments);
var header = jar.get({ url: 'http://localhost:9000' })
.map(function (c) {
return c.name + "=" + c.value;
}).join("; ");
this.setRequestHeader('cookie', header);
};
};
};

View File

@ -1,23 +0,0 @@
var passport = require('passport'),
LocalStrategy = require('passport-local').Strategy;
passport.use(new LocalStrategy(
function(username, password, done) {
if(username === 'jose' && password === 'Pa123'){
return done(null, {
name: 'jose',
mail: 'j@f.r'
});
} else {
return done(null, false, {message: 'wrong user name or password'});
}
}
));
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(user, done) {
done(null, user);
});