Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*jshint node: true */
- var express = require('express');
- var app = express(); // ---------------------------
- var bodyParser = require('body-parser');
- var cookieParser = require('cookie-parser');
- var expressSession = require('express-session');
- var mongoose = require('mongoose');
- var util = require('util');
- var expressLayouts = require('express-ejs-layouts');
- var path = require('path');
- var less = require('less-middleware');
- // Passport.js
- var passport = require('passport');
- var passportLocal = require('passport-local');
- var passportHttp = require('passport-http');
- // Serwer HTTPS
- // openssl req -x509 -nodes -days 365 -newkey rsa:1024 -out my.crt -keyout my.key
- var fs = require('fs');
- var https = require('https');
- var server = https.createServer({
- key: fs.readFileSync('./ssl/my.key'),
- cert: fs.readFileSync('./ssl/my.crt')
- }, app);
- // require config/server
- var socketio = require("socket.io");
- var io = socketio.listen(server);
- var MemoryStore = require('connect/lib/middleware/session/memory');
- var session_store = new MemoryStore();
- // parametry aplikacji
- var port = process.env.PORT || 3000;
- var secret = process.env.APP_SECRET || '$sekretny $sekret';
- var configDB = require('./config/database');
- app.set('trust proxy', 1); // trust first proxy
- // Model Mongoose reprezentujący uzytkownika
- var User = require('./models/user');
- var Post = require('./models/post');
- mongoose.connect(configDB.url);
- var db = mongoose.connection;
- db.on('open', function () {
- console.log('Połączono z MongoDB!');
- });
- db.on('error', console.error.bind(console, 'MongoDb Error: '));
- app.set('view engine', 'ejs');
- app.use(less(path.join(__dirname, '/src'), {
- dest: path.join(__dirname, '/public')
- }));
- app.use(express.static(path.join(__dirname, 'public')));
- app.use(expressLayouts);
- app.set('layout', 'layouts/layout');
- app.use(bodyParser.urlencoded({
- extended: false
- }));
- app.use(cookieParser());
- app.use(expressSession({
- secret: secret,
- resave: true,
- saveUninitialized: false,
- store: session_store
- }));
- // Używamy Passport.js
- app.use(passport.initialize());
- app.use(passport.session());
- // Konfiguracja Passport.js
- var validateUser = function (username, password, done){
- User.findOne({username: username}, function (err, user) {
- if (err) { done(err); }
- if (user) {
- // if (user.password === HASH(password)) {
- if (user.password === password) {
- done(null, user);
- } else {
- done(null, null);
- }
- } else { done(null, null); }
- });
- };
- passport.use(new passportLocal.Strategy(validateUser));
- passport.use(new passportHttp.BasicStrategy(validateUser));
- passport.serializeUser(function (user, done) {
- done(null, user.id);
- });
- passport.deserializeUser(function (id, done) {
- User.findOne({"_id": id}, function (err, user) {
- if (err) { done(err); }
- if (user) {
- done(null, {
- id: user._id,
- name: user.name,
- surname: user.surname,
- username: user.username,
- password: user.password
- });
- } else {
- done({ msg: 'Nieznany ID' });
- }
- });
- });
- // Routing aplikacji
- app.get('/', function (req, res) {
- res.render('page/index', {
- isAuthenticated: req.isAuthenticated(),
- user: req.user
- });
- });
- // redirect nie zalogowanego
- app.use(function(req, res, next) {
- var url = req.url;
- if (req.user === undefined & (url != '/add' & url != '/login') ){
- res.redirect('/');
- }else{
- next();
- }
- });
- app.get('/post', function (req, res) {
- res.render('page/post', {
- isAuthenticated: req.isAuthenticated(),
- user: req.user
- });
- });
- app.get('/login', function (req, res) {
- res.render('account/login', {section:"Logowanie"});
- });
- app.post('/login', passport.authenticate('local'), function (req, res) {
- req.session.user = req.user;
- res.redirect('/');
- });
- app.get('/add', function (req, res) {
- res.render('account/reg', {section:"Rejestracja"});
- });
- app.post('/add', function (req, res) {
- var tmp = new User(req.body);
- tmp.save(function (err) {
- if (err) {
- res.redirect('/add');
- }else{
- res.redirect('/login');
- }
- });
- });
- app.get('/logout', function (req, res) {
- req.logout();
- res.redirect('/');
- });
- var connect = require("connect");
- io.sockets.on('connection',function(socket){
- var cookie_string = socket.request.headers.cookie;
- var parsed_cookies = connect.utils.parseCookie(cookie_string);
- var connect_sid = parsed_cookies['connect.sid'].split(".")[0].split(":")[1];
- var session;
- if (connect_sid) {
- if(session_store.sessions[connect_sid] != undefined){
- session = JSON.parse(session_store.sessions[connect_sid]);
- session.user.socket = socket;
- //console.log(session.user.name);
- //console.log(socket.id);
- showWall(socket,session.user._id);
- socket.on('disconnect', function() {
- session.user.socket = null;
- });
- socket.on('sendPostMsg',function(data){
- var tmp = new Post({});
- tmp.content = data.data;
- tmp.author = mongoose.Types.ObjectId(session.user._id);
- if(typeof data.where != undefined){
- tmp.owner = mongoose.Types.ObjectId(session.user._id);
- }else{
- tmp.owner = mongoose.Types.ObjectId(data.where);
- }
- tmp.save(function (err) {
- showWall(socket,session.user._id);
- });
- });
- }
- }
- });
- // Uruchamiamy serwer HTTPS
- server.listen(port, function () {
- console.log('https://localhost:' + port);
- });
- var showWall = function(socket, id) {
- Post.find({owner:id}).populate('author').sort({created : -1}).exec(function (err,post) {
- if (!err) {
- app.render('page/postList', {'title':'Posty na tablicy','post':post}, function(err, view){
- socket.emit('getWall',{'view': view});
- });
- }
- });
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement