Skip to content

Instantly share code, notes, and snippets.

@jgarlick
Created January 2, 2013 09:46
Show Gist options
  • Save jgarlick/4433341 to your computer and use it in GitHub Desktop.
Save jgarlick/4433341 to your computer and use it in GitHub Desktop.
/**
* Module dependencies.
*/
var express = require('express')
, routes = require('./routes')
, user = require('./routes/user')
, http = require('http')
, path = require('path')
, connect = require('connect')
, cookie = require('cookie')
, sessionStore = new express.session.MemoryStore();
var app = express();
var server = http.createServer(app);
var io = require('socket.io').listen(server);
var SITE_SECRET = 'Good day';
app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser(SITE_SECRET));
app.use(express.session({store: sessionStore}));
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
});
app.configure('development', function(){
app.use(express.errorHandler());
});
function loginRequired(req, res, next) {
if (!req.session.user_name) {
res.redirect('/login');
} else {
next();
}
}
app.get('/', loginRequired, routes.index);
app.get('/users', user.list);
app.get('/login', user.login);
app.post('/login', function (req, res) {
var post = req.body;
if (post.user_name.length > 3) {
req.session.user_name = post.user_name;
res.redirect('/');
} else {
res.redirect('/login');
}
console.log('POST ' + post.user_name);
});
server.listen(app.get('port'), function(){
console.log("Express server listening on port " + app.get('port'));
});
/* websocket */
io.configure(function () {
io.set('authorization', function (data, callback) {
console.log ("AUTH");
if (!data.headers.cookie) {
return callback('Session cookie required.', false);
}
data.cookie = cookie.parse(data.headers.cookie);
data.cookie = connect.utils.parseSignedCookies(data.cookie, SITE_SECRET);
data.sessionID = data.cookie['connect.sid'];
sessionStore.get(data.sessionID, function (err, session) {
console.log("SESSION" + JSON.stringify(session));
if (err || !session) {
callback('No session', false);
} else {
data.session = session;
}
});
callback(null, true);
});
});
io.sockets.on('connection', function (socket) {
console.log('CONNECTION ' + socket.id + ' : ' + socket.handshake.session.user_name);
io.sockets.emit('chat', { msg: io.transports[socket.id].name });
socket.on('input', function (data) {
// console.log(data);
io.sockets.emit('chat', { from: socket.handshake.session.user_name, msg: data.msg})
});
});
//JSON.stringify
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment