Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // express + socket.io example (chat server)
- // that requires authentication via ldap.
- // express shares authentication with socket.io.
- var express = require('express');
- var io = require('socket.io');
- var ldap = require('./lib/node-ldapauth/ldapauth');
- var sessionStore = new express.session.MemoryStore(); // whatever
- var parseCookie = require('connect').utils.parseCookie;
- var LDAP_HOST = 'ldap.example.com';
- var LDAP_PORT = 389;
- var SESSION_KEY = 'web-chat.sid';
- var app = module.exports = express.createServer();
- var people = {};
- var buffer = [];
- app.configure(function(){
- app.set('views', __dirname + '/views');
- app.set('view engine', 'jade');
- app.use(express.static(__dirname + '/public'));
- app.use(express.logger({format: ':url :method :response-time ms :remote-addr :date'}));
- app.use(express.bodyParser());
- app.use(express.cookieParser());
- app.use(express.session(
- {'store': sessionStore,
- 'secret': "Attack at dawn!",
- 'key': SESSION_KEY}));
- app.use(app.router);
- });
- app.get('/logout', function(req, res) {
- req.session.destroy();
- res.render('logout');
- });
- app.get('/login', function(req, res) {
- res.render('login');
- });
- app.post('/login', function(req, res) {
- var username = req.body.username;
- var password = req.body.password;
- ldap.authenticate(LDAP_HOST, LDAP_PORT, username+'@DOMAIN', password, function(err, success) {
- if (username && password && success) {
- req.session.username = username;
- return res.redirect(req.body.next || '/');
- } else {
- return res.redirect("back");
- }
- });
- });
- app.get('/', loginRequired, function(req, res){
- res.render('index', {
- buffer: buffer
- });
- });
- function loginRequired(req, res, next) {
- if (req.session && req.session.username) {
- next();
- } else {
- res.redirect('/login?next=' + req.url);
- }
- }
- if (!module.parent) {
- app.listen(3001);
- console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
- }
- // ---------------------------------------------------------
- // The socket.io half
- var io = io.listen(app);
- io.set('authorization', function(data, accept) {
- if (data.headers.cookie) {
- data.cookie = parseCookie(data.headers.cookie);
- data.sessionID = data.cookie[SESSION_KEY];
- console.log("got here");
- console.log(data);
- sessionStore.get(data.sessionID, function(err, session) {
- if (err) {
- accept(err.message, false);
- } else {
- data.session = session;
- accept(null, true);
- }
- });
- } else {
- return accept('No session cookie', false);
- }
- });
- io.sockets.on('connection', function(socket) {
- var username = socket.handshake.session.username;
- socket.json.send({buffer: buffer});
- socket.broadcast.json.send({announce: username + ' has joined the room'});
- socket.on('message', function(message) {
- var msg = {from:username, text:message};
- buffer.push(msg);
- if (buffer.length > 50) buffer.shift();
- socket.broadcast.json.send(msg);
- socket.json.send(msg);
- });
- socket.on('disconnect', function() {
- socket.broadcast.send({announce: username + ' has left the room'});
- });
- });
Add Comment
Please, Sign In to add comment