SHARE
TWEET

Untitled

a guest May 22nd, 2017 106 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*jshint node: true */
  2. var express = require('express');
  3. var app = express();
  4. var bodyParser = require('body-parser');
  5. var cookieParser = require('cookie-parser');
  6. var expressSession = require('express-session');
  7. var mongoose = require('mongoose');
  8. var util = require('util');
  9. var expressLayouts = require('express-ejs-layouts');
  10. var path = require('path');
  11. var less = require('less-middleware');
  12.  
  13. // Passport.js
  14. var passport = require('passport');
  15. var passportLocal = require('passport-local');
  16. var passportHttp = require('passport-http');
  17.  
  18. // Serwer HTTPS
  19. // openssl req -x509 -nodes -days 365 -newkey rsa:1024 -out my.crt -keyout my.key
  20. var fs = require('fs');
  21. var https = require('https');
  22. var server = https.createServer({
  23.     key: fs.readFileSync('./ssl/my.key'),
  24.     cert: fs.readFileSync('./ssl/my.crt')
  25. }, app);
  26.  
  27. var socketio = require("socket.io");
  28. var io = socketio.listen(server);
  29.  
  30. var MemoryStore = require('connect/lib/middleware/session/memory');
  31. var session_store = new MemoryStore();
  32.  
  33. // parametry aplikacji
  34. var port = process.env.PORT || 3000;
  35. var secret = process.env.APP_SECRET || '$sekretny $sekret';
  36. var configDB = require('./config/database');
  37.  
  38. app.set('trust proxy', 1); // trust first proxy
  39.  
  40. // Model Mongoose reprezentujący uzytkownika
  41. var User = require('./models/user');
  42. var Post = require('./models/post');
  43. mongoose.connect(configDB.url);
  44. var db = mongoose.connection;
  45. db.on('open', function () {
  46.     console.log('Połączono z MongoDB!');
  47. });
  48. db.on('error', console.error.bind(console, 'MongoDb Error: '));
  49.  
  50. app.set('view engine', 'ejs');
  51. app.use(less(path.join(__dirname, '/src'), {
  52.     dest: path.join(__dirname, '/public')
  53. }));
  54.  
  55. app.use(express.static(path.join(__dirname, 'public')));
  56. app.use(expressLayouts);
  57. app.set('layout', 'layouts/layout');
  58. app.use(bodyParser.urlencoded({
  59.     extended: false
  60. }));
  61. app.use(cookieParser());
  62. app.use(expressSession({
  63.     secret: secret,
  64.     resave: true,
  65.     saveUninitialized: false,
  66.     store: session_store
  67. }));
  68.  
  69. // Używamy Passport.js
  70. app.use(passport.initialize());
  71. app.use(passport.session());
  72. // Konfiguracja Passport.js
  73. var validateUser = function (username, password, done){
  74.     User.findOne({username: username}, function (err, user) {
  75.         if (err) { done(err); }
  76.         if (user) {
  77. //            if (user.password === HASH(password)) {
  78.             if (user.password === password) {
  79.                 done(null, user);
  80.             } else {
  81.                 done(null, null);
  82.             }
  83.         } else { done(null, null); }
  84.     });
  85. };
  86. passport.use(new passportLocal.Strategy(validateUser));
  87. passport.use(new passportHttp.BasicStrategy(validateUser));
  88. passport.serializeUser(function (user, done) {
  89.     done(null, user.id);
  90. });
  91. passport.deserializeUser(function (id, done) {
  92.  
  93.     User.findOne({"_id": id}, function (err, user) {
  94.         if (err) { done(err); }
  95.         if (user) {
  96.             done(null, {
  97.                 id: user._id,
  98.                 name: user.name,
  99.                 surname: user.surname,
  100.                 username: user.username,
  101.                 password: user.password
  102.             });
  103.         } else {
  104.             done({ msg: 'Nieznany ID' });
  105.         }
  106.     });                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
  107. });
  108.  
  109. // Routing aplikacji
  110.  
  111.  
  112. app.get('/', function (req, res) {
  113.     res.render('page/index', {
  114.         isAuthenticated: req.isAuthenticated(),
  115.         user: req.user
  116.     });
  117. });
  118.  
  119.  
  120. // redirect nie zalogowanego
  121. app.use(function(req, res, next) {    
  122.     var url = req.url;
  123.     if (req.user === undefined & (url != '/add' & url != '/login') ){
  124.         res.redirect('/');
  125.     }else{
  126.         next();
  127.     }
  128. });
  129.  
  130.  
  131. app.get('/post', function (req, res) {
  132.    
  133.         res.render('page/post', {
  134.         isAuthenticated: req.isAuthenticated(),
  135.         user: req.user
  136.     });
  137. });
  138.  
  139. app.get('/login', function (req, res) {
  140.     res.render('account/login', {section:"Logowanie"});
  141. });
  142.  
  143. app.post('/login', passport.authenticate('local'), function (req, res) {
  144.  
  145.     req.session.user = req.user;
  146.     res.redirect('/');
  147. });
  148.  
  149. app.get('/add', function (req, res) {
  150.    res.render('account/reg', {section:"Rejestracja"});
  151. });
  152.  
  153. app.post('/add', function (req, res) {
  154.     var tmp = new User(req.body);
  155.     tmp.save(function (err) {
  156.       if (err) {
  157.         res.redirect('/add');
  158.       }else{
  159.         res.redirect('/login');    
  160.       }
  161.     });
  162.    
  163. });
  164.  
  165. app.get('/logout', function (req, res) {
  166.         req.logout();
  167.     res.redirect('/');
  168. });
  169.  
  170.  
  171.  
  172. var connect = require("connect");
  173. io.sockets.on('connection',function(socket){
  174.  
  175.     console.info('New client connected (id=' + socket.id + ').');
  176.     var cookie_string = socket.request.headers.cookie;
  177.     var parsed_cookies = connect.utils.parseCookie(cookie_string);
  178.     var connect_sid = parsed_cookies['connect.sid'].split(".")[0].split(":")[1];
  179.     var session = session_store.sessions[connect_sid];
  180.     if (connect_sid) {
  181.       if(session_store.sessions[connect_sid] != undefined){
  182.         console.log(JSON.parse(session_store.sessions[connect_sid]).user.name);
  183.         }
  184.     }
  185.     //var ts = (connection.handshake.headers.cookie)['connect.sid']
  186.     //var sessionID = tS.split(".")[0].split(":")[1];
  187.  
  188.     var clients = [];
  189.     clients.push(socket);
  190.     User.find({},function (err,user) {
  191.         if (!err) {
  192.             socket.emit('newMsg',user);
  193.         }
  194.     });
  195.  
  196.     socket.on('disconnect', function() {
  197.         var index = clients.indexOf(socket);
  198.         if (index != -1) {
  199.             clients.splice(index, 1);
  200.             console.info('Client gone (id=' + socket.id + ').');
  201.         }
  202.     });
  203.  
  204.     socket.on('sendMsg',function(data){
  205.         User.find({},function (err,user) {
  206.             if (!err) {
  207.                 io.sockets.emit('newMsg',user);
  208.             }
  209.         });
  210.     });
  211. });
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226. // Uruchamiamy serwer HTTPS
  227. server.listen(port, function () {
  228.     console.log('https://localhost:' + port);
  229. });
  230.  
  231.  
  232.  
  233. /*
  234.     var parent = new User({name:"edek2",username:"edek2",password:"edek2"});
  235.     parent.save();
  236.     User.findOne({username: 'edek2'}, function (err, user) {
  237.         if (user) {
  238.             console.log(user._id);
  239.             parent = user;
  240.             //parent = JSON.stringify(user);
  241.         }
  242.     });
  243.  
  244.     var child = new Post({content:"halo", owner:parent._id, author:parent._id});
  245.     child.save()
  246.  
  247.     User.hello();
  248.     res.json({'asd':'asd'});
  249. */
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top