Advertisement
Guest User

Untitled

a guest
May 22nd, 2017
82
0
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. // require config/server
  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.     var cookie_string = socket.request.headers.cookie;
  176.     var parsed_cookies = connect.utils.parseCookie(cookie_string);
  177.     var connect_sid = parsed_cookies['connect.sid'].split(".")[0].split(":")[1];
  178.     var session;
  179.     if (connect_sid) {
  180.         if(session_store.sessions[connect_sid] != undefined){
  181.             session = JSON.parse(session_store.sessions[connect_sid]);
  182.             session.user.socket = socket;
  183.             //console.log(session.user.name);
  184.             //console.log(socket.id);
  185.  
  186.             showWall(socket,session.user._id);
  187.             socket.on('disconnect', function() {
  188.                 session.user.socket = null;
  189.             });
  190.  
  191.             socket.on('sendPostMsg',function(data){
  192.  
  193.                 var tmp = new Post({});
  194.                 tmp.content = data.data;
  195.                 tmp.author = mongoose.Types.ObjectId(session.user._id);
  196.  
  197.                 if(typeof data.where != undefined){
  198.                     tmp.owner = mongoose.Types.ObjectId(session.user._id);
  199.                 }else{
  200.                     tmp.owner = mongoose.Types.ObjectId(data.where);
  201.                 }
  202.  
  203.                 tmp.save(function (err) {
  204.                     showWall(socket,session.user._id);
  205.                 });
  206.                
  207.             });
  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. var showWall = function(socket, id) {
  233.     Post.find({owner:id}).populate('author').sort({created : -1}).exec(function (err,post) {
  234.         if (!err) {
  235.             app.render('page/postList', {'title':'Posty na tablicy','post':post}, function(err, view){
  236.                socket.emit('getWall',{'view': view});
  237.             });
  238.         }
  239.     });
  240.  
  241.  };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement