Fixed #1?
parent
47a127e295
commit
c7deab58de
|
@ -27,7 +27,7 @@ passport.use(new GoogleStrategy({
|
|||
if (err) {
|
||||
console.log('Error finding invited user with passport session ID: '+req.session.passport.user+'\n'+err);
|
||||
var failMessage = 'Something went wrong finding your session. Would you like to <a href="/bug">report this error</a>?'; }
|
||||
user.googleID = profile.id;
|
||||
user.googleID = profile.id; // TODO: TypeError: Cannot set property 'googleID' of null (logging in without account)
|
||||
user.lastLogin = Date.now();
|
||||
user.save(function(err) {
|
||||
if (err) {
|
||||
|
|
|
@ -5,9 +5,7 @@ var router = require('express').Router(),
|
|||
Request = require('../models/request.js');
|
||||
|
||||
router.route('/')
|
||||
.all(function(req,res,next){
|
||||
next();
|
||||
}).get(function(req,res,next){
|
||||
.get(function(req,res,next){
|
||||
if (req.session.passport) {
|
||||
User.findById(req.session.passport.user, function(err, user){
|
||||
if (err){ mw.throwErr(req,err); }
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
"cookie-parser": "^1.4.1",
|
||||
"email-templates": "^2.1.0",
|
||||
"express": "^4.13.3",
|
||||
"express-crash": "0.0.2",
|
||||
"express-session": "^1.13.0",
|
||||
"kerberos": "0.0.17",
|
||||
"mailgun-js": "^0.7.7",
|
||||
|
|
277
server.js
277
server.js
|
@ -1,6 +1,6 @@
|
|||
/* IMPORTS */
|
||||
var express = require('express'),
|
||||
crash = require('express-crash'),
|
||||
{ var
|
||||
express = require('express'),
|
||||
bodyParser = require('body-parser'),
|
||||
cookieParser = require('cookie-parser'),
|
||||
session = require('express-session'),
|
||||
|
@ -12,145 +12,164 @@ var express = require('express'),
|
|||
User = require('./config/models/user.js'),
|
||||
app = express(),
|
||||
http = require('http').Server(app),
|
||||
io = require('socket.io')(http);
|
||||
io = require('socket.io')(http); }
|
||||
|
||||
/* SETUP */
|
||||
|
||||
// Templates
|
||||
nunjucks.configure(__dirname+'/views', {
|
||||
autoescape: true,
|
||||
express: app
|
||||
});
|
||||
|
||||
// Session
|
||||
app.use(session({
|
||||
secret: secret.session,
|
||||
saveUninitialized: true,
|
||||
resave: true
|
||||
}));
|
||||
app.use(bodyParser.json());
|
||||
app.use(bodyParser.urlencoded({
|
||||
extended: true
|
||||
}));
|
||||
app.use(cookieParser(secret.cookie));
|
||||
app.use(flash());
|
||||
|
||||
// Auth
|
||||
app.use(passport.initialize());
|
||||
app.use(passport.session());
|
||||
require('./config/auth.js');
|
||||
passport.serializeUser(function(user,done) {
|
||||
done(null, user.id);
|
||||
});
|
||||
passport.deserializeUser(function(id,done) {
|
||||
User.findById(id, function(err, user) {
|
||||
if(!err) done(null, user);
|
||||
else done(err, null);
|
||||
{
|
||||
// Templates
|
||||
nunjucks.configure(__dirname+'/views', {
|
||||
autoescape: true,
|
||||
express: app
|
||||
});
|
||||
});
|
||||
|
||||
// Database
|
||||
mongoose.connect(secret.mongoSetup, {
|
||||
server:{socketOptions:{
|
||||
keepAlive:1, connectTimeoutMS:30000 }},
|
||||
replset:{socketOptions:{
|
||||
keepAlive:1, connectTimeoutMS:30000 }}
|
||||
});
|
||||
|
||||
// Routes
|
||||
app.use(
|
||||
require('./config/routes/index.js'),
|
||||
require('./config/routes/auth.js'),
|
||||
require('./config/routes/feedback.js'),
|
||||
require('./config/routes/misc.js')
|
||||
);
|
||||
app.use('/trac', require('./config/routes/trac.js'));
|
||||
app.use('/invited', require('./config/routes/invite.js'));
|
||||
app.use('/dashboard', require('./config/routes/dashboard.js'));
|
||||
app.use('/admin', require('./config/routes/admin.js'));
|
||||
app.use('/static', express.static(__dirname+'/static'));
|
||||
|
||||
|
||||
// Handle errors
|
||||
// if (secret.url=='https://tracman.org') {
|
||||
var handle404 = function(err,req,res,next) {
|
||||
if (err) { console.log('404 handling error: '+err); }
|
||||
res.render('error.html', {code:404});
|
||||
};
|
||||
var handle500 = function(err,req,res,next) {
|
||||
if (err) { console.log('500 handling error: '+err); }
|
||||
res.render('error.html', {code:500});
|
||||
};
|
||||
app.use(crash.handle404(handle404));
|
||||
app.use(crash.handle500(handle500));
|
||||
crash.trapRoute(app);
|
||||
crash.handle(app, handle404, handle500);
|
||||
// }
|
||||
|
||||
/* RUNTIME */
|
||||
|
||||
// Check for tracking users
|
||||
function checkForUsers(room) {
|
||||
if (room) {
|
||||
io.to('app-'+room).emit('activate',
|
||||
(io.of("/").adapter.rooms[room])?'true':'false'
|
||||
);
|
||||
} else {
|
||||
User.find({}, function(err, users){
|
||||
if (err) { console.log('Sockets error finding all users in all rooms: '+err); }
|
||||
users.forEach( function(user){
|
||||
checkForUsers(user.id);
|
||||
});
|
||||
|
||||
// Session
|
||||
app.use(session({
|
||||
secret: secret.session,
|
||||
saveUninitialized: true,
|
||||
resave: true
|
||||
}));
|
||||
app.use(bodyParser.json());
|
||||
app.use(bodyParser.urlencoded({
|
||||
extended: true
|
||||
}));
|
||||
app.use(cookieParser(secret.cookie));
|
||||
app.use(flash());
|
||||
|
||||
// Auth
|
||||
app.use(passport.initialize());
|
||||
app.use(passport.session());
|
||||
require('./config/auth.js');
|
||||
passport.serializeUser(function(user,done) {
|
||||
done(null, user.id);
|
||||
});
|
||||
passport.deserializeUser(function(id,done) {
|
||||
User.findById(id, function(err, user) {
|
||||
if(!err) done(null, user);
|
||||
else done(err, null);
|
||||
});
|
||||
});
|
||||
|
||||
// Database
|
||||
mongoose.connect(secret.mongoSetup, {
|
||||
server:{socketOptions:{
|
||||
keepAlive:1, connectTimeoutMS:30000 }},
|
||||
replset:{socketOptions:{
|
||||
keepAlive:1, connectTimeoutMS:30000 }}
|
||||
});
|
||||
|
||||
// Routes
|
||||
app.use(
|
||||
require('./config/routes/index.js'),
|
||||
require('./config/routes/auth.js'),
|
||||
require('./config/routes/feedback.js'),
|
||||
require('./config/routes/misc.js')
|
||||
);
|
||||
app.use('/trac', require('./config/routes/trac.js'));
|
||||
app.use('/invited', require('./config/routes/invite.js'));
|
||||
app.use('/dashboard', require('./config/routes/dashboard.js'));
|
||||
app.use('/admin', require('./config/routes/admin.js'));
|
||||
app.use('/static', express.static(__dirname+'/static'));
|
||||
app.use(function(req,res,next) {
|
||||
var err = new Error('Not Found');
|
||||
err.status = 404;
|
||||
next(err);
|
||||
});
|
||||
|
||||
// Error Handlers
|
||||
{
|
||||
if (secret.url!=='https://tracman.org') {
|
||||
// Development
|
||||
// if (app.get('env') === 'development') {
|
||||
app.use(function(err,req,res,next) {
|
||||
if (res.headersSent) { return next(err); }
|
||||
res.status(err.status||500);
|
||||
res.render('error.html', {
|
||||
code: err.status,
|
||||
message: err.message,
|
||||
error: err
|
||||
});
|
||||
});
|
||||
}
|
||||
else { // Production
|
||||
app.use(function(err,req,res,next) {
|
||||
if (res.headersSent) { return next(err); }
|
||||
res.status(err.status||500);
|
||||
res.render('error.html', {
|
||||
code: err.status,
|
||||
message: err.message
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Websockets
|
||||
io.on('connection', function(socket) {
|
||||
|
||||
socket.on('room', function(room) {
|
||||
socket.join(room);
|
||||
if (room.slice(0,4)!='app-'){
|
||||
User.findById({_id:room}, function(err, user) {
|
||||
if (err) { console.log('Sockets error finding tracked user of room '+room+'\n'+err); }
|
||||
if (user) {
|
||||
io.to('app-'+room).emit('activate','true'); }
|
||||
});
|
||||
/* RUNTIME */
|
||||
{
|
||||
// Check for tracking users
|
||||
function checkForUsers(room) {
|
||||
if (room) {
|
||||
io.to('app-'+room).emit('activate',
|
||||
(io.of("/").adapter.rooms[room])?'true':'false'
|
||||
);
|
||||
} else {
|
||||
checkForUsers(room.slice(4));
|
||||
User.find({}, function(err, users){
|
||||
if (err) { console.log('Sockets error finding all users in all rooms: '+err); }
|
||||
users.forEach( function(user){
|
||||
checkForUsers(user.id);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Websockets
|
||||
io.on('connection', function(socket) {
|
||||
|
||||
socket.on('room', function(room) {
|
||||
socket.join(room);
|
||||
if (room.slice(0,4)!='app-'){
|
||||
User.findById({_id:room}, function(err, user) {
|
||||
if (err) { console.log('Sockets error finding tracked user of room '+room+'\n'+err); }
|
||||
if (user) {
|
||||
io.to('app-'+room).emit('activate','true'); }
|
||||
});
|
||||
} else {
|
||||
checkForUsers(room.slice(4));
|
||||
}
|
||||
});
|
||||
|
||||
socket.on('app', function(loc){
|
||||
loc.time = Date.now();
|
||||
io.to(loc.usr).emit('trac', loc);
|
||||
User.findByIdAndUpdate(loc.usr, {last:{
|
||||
lat: parseFloat(loc.lat),
|
||||
lon: parseFloat(loc.lon),
|
||||
dir: parseFloat(loc.dir||0),
|
||||
spd: parseFloat(loc.spd||0),
|
||||
time: Date.now()
|
||||
}}, function(err, user) {
|
||||
if (err) { console.log('Could not update last location of user '+loc.user+'\n'+err); }
|
||||
if (!user) { console.log("No user found: "+loc.user); }
|
||||
});
|
||||
});
|
||||
|
||||
socket.onclose = function(reason){
|
||||
var closedroom = Object.keys(
|
||||
socket.adapter.sids[socket.id]).slice(1)[0];
|
||||
setTimeout(function() {
|
||||
checkForUsers(closedroom);
|
||||
}, 3000);
|
||||
Object.getPrototypeOf(this).onclose.call(this,reason);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
socket.on('app', function(loc){
|
||||
loc.time = Date.now();
|
||||
io.to(loc.usr).emit('trac', loc);
|
||||
User.findByIdAndUpdate(loc.usr, {last:{
|
||||
lat: parseFloat(loc.lat),
|
||||
lon: parseFloat(loc.lon),
|
||||
dir: parseFloat(loc.dir||0),
|
||||
spd: parseFloat(loc.spd||0),
|
||||
time: Date.now()
|
||||
}}, function(err, user) {
|
||||
if (err) { console.log('Could not update last location of user '+loc.user+'\n'+err); }
|
||||
if (!user) { console.log("No user found: "+loc.user); }
|
||||
});
|
||||
// Listen
|
||||
http.listen(secret.port, function(){
|
||||
console.log('Listening at '+secret.url+':'+secret.port);
|
||||
checkForUsers();
|
||||
});
|
||||
|
||||
socket.onclose = function(reason){
|
||||
var closedroom = Object.keys(
|
||||
socket.adapter.sids[socket.id]).slice(1)[0];
|
||||
setTimeout(function() {
|
||||
checkForUsers(closedroom);
|
||||
}, 3000);
|
||||
Object.getPrototypeOf(this).onclose.call(this,reason);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
// Listen
|
||||
http.listen(secret.port, function(){
|
||||
console.log('Listening at '+secret.url+':'+secret.port);
|
||||
checkForUsers();
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = app;
|
|
@ -4,7 +4,9 @@
|
|||
{% block main %}
|
||||
<section class='dark'>
|
||||
<div class='container'>
|
||||
<img style="width:100%;" src="https://http.cat/{{ code }}.jpg" />
|
||||
<h2>{{message}}</h2>
|
||||
<img style="width:100%;" src="https://http.cat/{{code}}.jpg" />
|
||||
{% if error %}<p>{{error}}</p>{% endif %}
|
||||
</div>
|
||||
</section>
|
||||
{% endblock %}
|
||||
|
|
Loading…
Reference in New Issue