Guest User

Untitled

a guest
Sep 10th, 2018
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.10 KB | None | 0 0
  1. // express + socket.io example (chat server)
  2. // that requires authentication via ldap.
  3. // express shares authentication with socket.io.
  4.  
  5. var express = require('express');
  6. var io = require('socket.io');
  7. var ldap = require('./lib/node-ldapauth/ldapauth');
  8. var sessionStore = new express.session.MemoryStore(); // whatever
  9. var parseCookie = require('connect').utils.parseCookie;
  10.  
  11. var LDAP_HOST = 'ldap.example.com';
  12. var LDAP_PORT = 389;
  13. var SESSION_KEY = 'web-chat.sid';
  14.  
  15. var app = module.exports = express.createServer();
  16.  
  17. var people = {};
  18. var buffer = [];
  19.  
  20. app.configure(function(){
  21. app.set('views', __dirname + '/views');
  22. app.set('view engine', 'jade');
  23. app.use(express.static(__dirname + '/public'));
  24. app.use(express.logger({format: ':url :method :response-time ms :remote-addr :date'}));
  25.  
  26. app.use(express.bodyParser());
  27. app.use(express.cookieParser());
  28. app.use(express.session(
  29. {'store': sessionStore,
  30. 'secret': "Attack at dawn!",
  31. 'key': SESSION_KEY}));
  32.  
  33. app.use(app.router);
  34. });
  35.  
  36. app.get('/logout', function(req, res) {
  37. req.session.destroy();
  38. res.render('logout');
  39. });
  40.  
  41. app.get('/login', function(req, res) {
  42. res.render('login');
  43. });
  44.  
  45. app.post('/login', function(req, res) {
  46. var username = req.body.username;
  47. var password = req.body.password;
  48. ldap.authenticate(LDAP_HOST, LDAP_PORT, username+'@DOMAIN', password, function(err, success) {
  49. if (username && password && success) {
  50. req.session.username = username;
  51. return res.redirect(req.body.next || '/');
  52. } else {
  53. return res.redirect("back");
  54. }
  55. });
  56. });
  57.  
  58. app.get('/', loginRequired, function(req, res){
  59. res.render('index', {
  60. buffer: buffer
  61. });
  62. });
  63.  
  64. function loginRequired(req, res, next) {
  65. if (req.session && req.session.username) {
  66. next();
  67. } else {
  68. res.redirect('/login?next=' + req.url);
  69. }
  70. }
  71.  
  72. if (!module.parent) {
  73. app.listen(3001);
  74. console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
  75. }
  76.  
  77. // ---------------------------------------------------------
  78. // The socket.io half
  79.  
  80. var io = io.listen(app);
  81.  
  82. io.set('authorization', function(data, accept) {
  83. if (data.headers.cookie) {
  84. data.cookie = parseCookie(data.headers.cookie);
  85. data.sessionID = data.cookie[SESSION_KEY];
  86. console.log("got here");
  87. console.log(data);
  88. sessionStore.get(data.sessionID, function(err, session) {
  89. if (err) {
  90. accept(err.message, false);
  91. } else {
  92. data.session = session;
  93. accept(null, true);
  94. }
  95. });
  96. } else {
  97. return accept('No session cookie', false);
  98. }
  99. });
  100.  
  101. io.sockets.on('connection', function(socket) {
  102. var username = socket.handshake.session.username;
  103. socket.json.send({buffer: buffer});
  104. socket.broadcast.json.send({announce: username + ' has joined the room'});
  105.  
  106. socket.on('message', function(message) {
  107. var msg = {from:username, text:message};
  108. buffer.push(msg);
  109. if (buffer.length > 50) buffer.shift();
  110.  
  111. socket.broadcast.json.send(msg);
  112. socket.json.send(msg);
  113. });
  114.  
  115. socket.on('disconnect', function() {
  116. socket.broadcast.send({announce: username + ' has left the room'});
  117. });
  118. });
Add Comment
Please, Sign In to add comment