Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Modules require
- var path = require('path');
- var express = require('express');
- var cookieParser = require('cookie-parser');
- var bodyParser = require('body-parser');
- var socketio = require('socket.io');
- var log = require('./log');
- var validator = require("email-validator");
- var session = require("express-session");
- var User = require('./models/user').User;
- var Project = require('./models/project').Project;
- var ObjectId = require('mongodb').ObjectID
- var app = express();
- var io = require('socket.io')(1273);
- var cookie = require('cookie');
- var connect = require('connect');
- var MongoStore = require('connect-mongo')(session);
- var sessionStore = new MongoStore({ url: 'mongodb://localhost/session' });
- var url = require("url.js");
- //Functions
- var ObID = function(id)
- {
- try {
- id = ObjectId(id);
- }catch(err) {
- err = false;
- id = '';
- }
- return id;
- }
- var link_format = function (link) {
- link_par = url.parse(link);
- if (!link_par.scheme) {
- link = 'http://' + link;
- }
- if (!link_par.path) {
- link = link + '/';
- }
- return link.toLowerCase();
- }
- var json = function(data)
- {
- return JSON.stringify(data);
- }
- var login = function(user, req, res)
- {
- var rand = Math.random() + '';
- User.update({email: user.email}, {ip: req.remote_addr, rand: rand}, { multi: true }, function(){
- log('[' + user.email + '] авторизован', ' Auth ');
- req.session.rand = rand;
- req.session._id = user._id;
- res.send(json({res: 'ok', auth: 'ok'}));
- });
- }
- var vEmail = function(email)
- {
- var re = /\S+@\S+\.\S+/;
- return re.test(email);
- };
- var vPhone = function(phone)
- {
- var phoneno = /^\+?([0-9]{2})\)?[-. ]?([0-9]{4})[-. ]?([0-9]{4})$/;
- return phoneno.test(phone);
- };
- var explode = function(delimiter, string)
- {
- var emptyArray = { 0: '' };
- if ( arguments.length != 2
- || typeof arguments[0] == 'undefined'
- || typeof arguments[1] == 'undefined' )
- {
- return null;
- }
- if ( delimiter === ''
- || delimiter === false
- || delimiter === null )
- {
- return false;
- }
- if ( typeof delimiter == 'function'
- || typeof delimiter == 'object'
- || typeof string == 'function'
- || typeof string == 'object' )
- {
- return emptyArray;
- }
- if ( delimiter === true ) {
- delimiter = '1';
- }
- return string.toString().split ( delimiter.toString() );
- }
- //Config
- app.set('views', path.join(__dirname, 'views'));
- app.set('view engine', 'ejs');
- app.set('port', 8080);
- app.set('secret', 'secretkeyforadscreator');
- app.set('key', 'sid');
- //Http server start
- app.listen(app.get('port'));
- log('Start in '+app.get('port'), ' Server ');
- //Use modules
- app.use(bodyParser.json());
- app.use(bodyParser.urlencoded({ extended: false }));
- app.use(cookieParser());
- app.use(express.static(path.join(__dirname, 'public')));
- app.use(session({
- secret: app.get('secret'),
- key: app.get('key'),
- resave: true,
- store: sessionStore,
- saveUninitialized: true
- }))
- //Remote addr
- app.use(function(req, res, next){
- req.remote_addr = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
- req.remote_addr = req.remote_addr.replace(new RegExp(":",'g'),"").replace(new RegExp("f",'g'),"");
- //console.log(req.session._id);
- next();
- });
- //Uri segment
- app.use(function(req, res, next){
- req.uri = explode('/', req.url + "");
- next();
- });
- //Middleware api
- app.use('/api', function(req, res, next){
- switch(req.body.action){
- case 'reg':
- var data = req.body;
- var email = data.email;
- var password = data.password;
- var password2 = data.password2;
- var firstn = data.firstn;
- var lastn = data.lastn;
- var phone = data.phone;
- var rand = Math.random() + '';
- User.find({email: email}, function(err, users){
- if(users.length > 0){
- res.send(json({res: 'ok', reg: 'no', mess: 'Пользователь с таким email уже существует'}));
- }else if(firstn.length < 2){
- res.send(json({res: 'ok', reg: 'no', mess: 'Имя не может быть менее двух символов'}));
- }else if(lastn.length < 2){
- res.send(json({res: 'ok', reg: 'no', mess: 'Фамилия не может быть менее двух символов'}));
- }else if(!vEmail(email)){
- res.send(json({res: 'ok', reg: 'no', mess: 'Не правильный формат email'}));
- }else if(password.length < 8){
- res.send(json({res: 'ok', reg: 'no', mess: 'Пароль не может быть менее 8 символов'}));
- }else if(password !== password2){
- res.send(json({res: 'ok', reg: 'no', mess: 'Пароли не совпадают'}));
- }else{
- var new_user = new User({
- email: email,
- password: password,
- ip: req.remote_addr,
- firstn: firstn,
- lastn: lastn,
- rand: rand
- });
- new_user.save(function(err, user){
- if(err)
- {
- res.send(json({res: 'error', reg: 'no'}));
- }
- else
- {
- log('[' + user.email + '] зарегистрирован', ' Auth ');
- req.session.rand = user.rand;
- req.session._id = user._id;
- res.send(json({res: 'ok', reg: 'ok'}));
- }
- });
- }
- })
- break;
- case 'auth':
- var data = req.body;
- var email = data.email || '';
- var password = data.password || '';
- User.findOne({email: email}, function(err, user){
- //if(err) throw err;
- user ? user.checkPassword(password) ? login(user, req, res):
- res.send(json({res: 'ok', auth: 'no'})):res.send(json({res: 'ok', auth: 'no'}));
- });
- break;
- default:
- res.send(json({res: 'error'}));
- break;
- }
- });
- //Middleware auth
- app.use(function(req, res, next){
- req.session._id = req.session._id || '';
- var find = {};
- find['_id'] = ObID(req.session._id);
- find['ip'] = req.remote_addr;
- User.findOne(find, function(err, user){
- (user) ? (req.user = user) : (req.user = false);
- (user) ? (req.session.user = user) : (req.session.user = false);
- (req.url !== '/auth' && req.url !== '/reg' && !req.user)? (res.redirect('/auth')): next();
- });
- })
- //Log pages
- app.use(function(req, res, next){
- if(req.user){
- log('['+req.user.email+'] запросил "'+req.url+'"', ' Http ');
- }else{
- log('['+req.remote_addr+'] запросил "'+req.url+'"', ' Http ');
- }
- next();
- });
- //Http pages
- app.use(function (req, res, next) {
- if (req.url !== '/auth' && req.url !== '/reg'){
- next();
- } else {
- for (var i in io.sockets.sockets) {
- var socket = io.sockets.sockets[i];
- if (socket.handshake.id + '' === req.session.user._id + '') {
- socket.disconnect();
- }
- }
- req.session.destroy(function () {
- req.user = false;
- res.render('auth', { form: req.url.replace('/', '') });
- });
- }
- });
- app.get('/', function(req, res, next){
- res.render('projects', {href: req.uri[1]});
- });
- app.use(function (req, res, next) {
- res.render('404', { href: req.uri[1] });
- });
- io.on('connection', function (socket) {
- socket.emits = function (event, data) {
- evetn = event || false;
- data = data || false;
- if (event && data) {
- for (var i in io.sockets.sockets) {
- var client = io.sockets.sockets[i];
- if (client.handshake.id + '' === socket.handshake.id + '') {
- client.emit(event, data);
- }
- }
- }
- }
- var data = socket.handshake;
- var ssid = cookie.parse(data.headers.cookie, 'secret=' + app.get('secret'))[app.get('key')];
- var sid = cookieParser.signedCookie(ssid, app.get('secret'));
- sessionStore.load(sid, function (err, session) {
- if (session.user) {
- var user = session.user;
- log('[' + user.email + '] покдлючен', ' IO ');
- socket.handshake.id = user._id;
- socket.on('create_project', function (data) {
- var name = data.name;
- var link = data.link;
- link = link_format(link);
- var new_project = new Project({ owner: user._id, name: name, link: link });
- new_project.save(function (err, project) {
- log('[' + session.user.email + '] создал проект', ' IO ');
- socket.emits('add_project', project);
- });
- });
- socket.on('edit_project_save', function (data) {
- var id = data.id;
- var name = data.name;
- var link = data.link;
- link = link_format(link);
- Project.update({ _id: ObID(id) }, { name: name, link: link }, { multi: true }, function (err, result) {
- Project.findOne({ _id: ObID(id) }, function (err, project) {
- log('[' + session.user.email + '] изменил проект', ' IO ');
- socket.emits('edit_project_save', project);
- });
- });
- });
- socket.on('edit_project', function (id) {
- Project.find({ _id: ObID(id) }, function (err, projects) {
- socket.emit('edit_project', projects);
- });
- });
- socket.on('remove_project', function (id) {
- Project.find({ _id: ObID(id) }).remove(function () {
- log('[' + session.user.email + '] удалил проект', ' IO ');
- socket.emits('remove_project', id);
- });
- });
- socket.on('projects_load', function () {
- log('[' + user.email + '] запросил список проектов', ' IO ');
- Project.find({ owner: user._id }, function (err, projects) {
- if (err) {
- socket.emit('error', 'Ошибка подключения к базе')
- } else {
- socket.emit('projects_load', projects);
- }
- });
- });
- socket.on('disconnect', function () {
- log('[' + session.user.email + '] отключен', ' IO ');
- })
- } else {
- socket.disconnect();
- }
- });
- });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement