init
commit
e9772953f0
|
@ -10,20 +10,21 @@ passport.use(new GoogleStrategy({
|
|||
callbackURL: secret.url+'/auth/google/callback',
|
||||
passReqToCallback: true
|
||||
}, function(req, accessToken, refreshToken, profile, done) {
|
||||
User.findOne({googleID: profile.id}, function(err, user) {
|
||||
if(err) {console.log(err);}
|
||||
User.findOne({googleID: profile.id}, function(err, user){
|
||||
if(err) { console.log(err); }
|
||||
if (!err && user !== null) { // Log in
|
||||
if (!user.name) {
|
||||
user.name = profile.displayName;
|
||||
}
|
||||
user.lastLogin = Date.now();
|
||||
user.save(function (err, raw) {
|
||||
if (err) { console.log(err); }
|
||||
if (err) { throwErr(req,err); }
|
||||
});
|
||||
done(null, user);
|
||||
} else { // No existing user with google auth
|
||||
if (req.session.passport) { // Creating new user
|
||||
User.findById(req.session.passport.user, function(err, user){
|
||||
if (err){ console.log(err); }
|
||||
user.googleID = profile.id;
|
||||
user.lastLogin = Date.now();
|
||||
user.save(function(err){
|
||||
|
@ -37,6 +38,7 @@ passport.use(new GoogleStrategy({
|
|||
}
|
||||
});
|
||||
}));
|
||||
|
||||
passport.use(new GoogleTokenStrategy({
|
||||
clientID: secret.googleClientId
|
||||
}, function(parsedToken, googleId, done) {
|
||||
|
|
|
@ -12,7 +12,7 @@ var renderMail = function(template, params, next) {
|
|||
.render(params, function (err, msg) {
|
||||
if (err) { console.log(err); }
|
||||
next(msg);
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
module.exports = {
|
||||
|
||||
throwErr: function(req,err){
|
||||
console.log(err);
|
||||
req.flash('error-message',err);
|
||||
req.flash('error', (err.message||'')+'<br>Would you like to <a href="/bug">report this error</a>?');
|
||||
},
|
||||
|
||||
ensureAuth: function(req,res,next){
|
||||
if (req.isAuthenticated()) { return next(); }
|
||||
else {
|
||||
req.session.returnTo = req.path;
|
||||
req.flash('error', 'You must be signed in to do that. <a href="/login">Click here to log in</a>. ');
|
||||
res.redirect('/');
|
||||
}
|
||||
},
|
||||
|
||||
ensureAdmin: function(req,res,next){
|
||||
if (req.user.isAdmin) { return next(); }
|
||||
else { res.sendStatus(401); }
|
||||
}
|
||||
|
||||
};
|
|
@ -1,5 +1,4 @@
|
|||
var app = require('express')(),
|
||||
server = require('../server.js'),
|
||||
User = require('./models/user.js'),
|
||||
Request = require('./models/request.js'),
|
||||
bodyParser = require('body-parser'),
|
||||
|
@ -44,7 +43,7 @@ module.exports = function(app){
|
|||
app.route('/')
|
||||
.all(function(req,res,next){
|
||||
next();
|
||||
}).get(function(req,res){
|
||||
}).get(function(req,res,next){
|
||||
if (req.session.passport) {
|
||||
User.findById(req.session.passport.user, function(err, user){
|
||||
if (err){ throwErr(req,err); }
|
||||
|
@ -96,7 +95,7 @@ module.exports = function(app){
|
|||
app.route('/dashboard')
|
||||
.all(ensureAuth, function(req,res,next){
|
||||
next();
|
||||
}).get(function(req,res){
|
||||
}).get(function(req,res,next){
|
||||
User.findById(req.session.passport.user, function(err, user){
|
||||
if (err){ throwErr(req,err); }
|
||||
if (!user){ next(); }
|
||||
|
@ -130,6 +129,7 @@ module.exports = function(app){
|
|||
app.get('/validate', function(req,res){
|
||||
if (req.query.slug) { // validate unique slug
|
||||
User.findOne({slug:slug(req.query.slug)}, function(err, existingUser){
|
||||
if (err) { console.log('/validate error:',err); }
|
||||
if (existingUser && existingUser.id!==req.session.passport.user) { res.sendStatus(400); }
|
||||
else { res.sendStatus(200); }
|
||||
});
|
||||
|
@ -157,7 +157,7 @@ module.exports = function(app){
|
|||
}); }
|
||||
});
|
||||
});
|
||||
app.get('/trac/id/:id', function(req,res){
|
||||
app.get('/trac/id/:id', function(req,res,next){
|
||||
User.findById(req.params.id, function(err, user){
|
||||
if (err){ throwErr(req,err); }
|
||||
if (!user){ next(); }
|
||||
|
@ -173,7 +173,7 @@ module.exports = function(app){
|
|||
if (err) { throwErr(req,err); }
|
||||
if (!request) { next(); }
|
||||
else {
|
||||
user = new User({ // Create new user
|
||||
new User({ // Create new user
|
||||
requestId: request._id,
|
||||
email: '',
|
||||
slug: request._id,
|
||||
|
@ -186,7 +186,7 @@ module.exports = function(app){
|
|||
showAlt: false,
|
||||
showStreetview: true
|
||||
}
|
||||
}); user.save(function(err) {
|
||||
}).save(function(err) {
|
||||
if (err) { throwErr(req,err); }
|
||||
User.findOne({requestId:request._id}, function(err, user) {
|
||||
if (err) { throwErr(req,err); }
|
||||
|
@ -221,7 +221,7 @@ module.exports = function(app){
|
|||
app.route('/pro')
|
||||
.all(ensureAuth, function(req,res,next){
|
||||
next();
|
||||
}).get(function(req,res){
|
||||
}).get(function(req,res,next){
|
||||
User.findById(req.session.passport.user, function(err, user){
|
||||
if (err){ throwErr(req,err); }
|
||||
if (!user){ next(); }
|
||||
|
@ -252,8 +252,7 @@ module.exports = function(app){
|
|||
res.redirect('/dashboard');
|
||||
});
|
||||
});
|
||||
app.route('/bug')
|
||||
.all(ensureAuth, function(req,res,next){
|
||||
app.route('/bug').all(ensureAuth, function(req,res,next){
|
||||
next();
|
||||
}).get(function(req,res){
|
||||
res.render('bug.html', {
|
||||
|
@ -345,5 +344,4 @@ module.exports = function(app){
|
|||
if (!req.user) { res.sendStatus(401); }
|
||||
else { res.send(req.user); }
|
||||
} );
|
||||
|
||||
}
|
||||
};
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
var router = require('express').Router(),
|
||||
mw = require('../middleware.js'),
|
||||
mail = require('../mail.js'),
|
||||
User = require('../models/user.js'),
|
||||
Request = require('../models/request.js');
|
||||
|
||||
router.route('/requests')
|
||||
.all([mw.ensureAuth, mw.ensureAdmin], function(req,res,next){
|
||||
next();
|
||||
}).get(function(req,res){
|
||||
User.findById(req.session.passport.user, function(err, user){
|
||||
if (err){ req.flash('error', err.message); }
|
||||
Request.find({}, function(err, requests){
|
||||
if (err) { req.flash('error', err.message); }
|
||||
res.render('admin/requests.html', {
|
||||
user: user,
|
||||
noFooter: '1',
|
||||
requests: requests,
|
||||
success:req.flash('success')[0],
|
||||
error:req.flash('error')[0]
|
||||
});
|
||||
});
|
||||
});
|
||||
}).post(function(req,res){
|
||||
Request.findById(req.body.invite, function(err, request){
|
||||
if (err){ req.flash('error', err.message); }
|
||||
mail.sendInvite(request, function (err, raw) {
|
||||
if (err) { req.flash('error', err.message); }
|
||||
request.granted = Date.now();
|
||||
request.save(function(err) {
|
||||
if (err) { req.flash('error', err.message); }
|
||||
});
|
||||
req.flash('success', 'Invitation sent to <i>'+request.name+'</i>.');
|
||||
res.redirect('/admin/requests');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/users', [mw.ensureAuth, mw.ensureAdmin], function(req,res){
|
||||
User.findById(req.session.passport.user, function(err, user){
|
||||
if (err){ req.flash('error', err.message); }
|
||||
User.find({}, function(err, users){
|
||||
if (err) { req.flash('error', err.message); }
|
||||
res.render('admin/users.html', {
|
||||
user: user,
|
||||
users: users,
|
||||
noFooter: '1',
|
||||
success:req.flash('success')[0],
|
||||
error:req.flash('error')[0]
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
|
@ -0,0 +1,28 @@
|
|||
var router = require('express').Router(),
|
||||
passport = require('passport');
|
||||
|
||||
router.get('/login', function(req,res){
|
||||
res.redirect('/auth/google');
|
||||
});
|
||||
router.get('/logout', function(req,res){
|
||||
req.logout();
|
||||
res.redirect('/');
|
||||
});
|
||||
|
||||
router.get('/auth/google', passport.authenticate('google', { scope: [
|
||||
'https://www.googleapis.com/auth/plus.login',
|
||||
'https://www.googleapis.com/auth/plus.profile.emails.read'
|
||||
] }));
|
||||
router.get('/auth/google/callback', passport.authenticate('google', {
|
||||
failureRedirect: '/',
|
||||
failureFlash: true,
|
||||
successRedirect: '/dashboard?rd=1',
|
||||
successFlash: true
|
||||
} ));
|
||||
|
||||
router.get('/auth/google/idtoken', passport.authenticate('google-id-token'), function (req,res) {
|
||||
if (!req.user) { res.sendStatus(401); }
|
||||
else { res.send(req.user); }
|
||||
} );
|
||||
|
||||
module.exports = router;
|
|
@ -0,0 +1,41 @@
|
|||
var router = require('express').Router(),
|
||||
mw = require('../middleware.js'),
|
||||
slug = require('slug'),
|
||||
User = require('../models/user.js');
|
||||
|
||||
router.route('/')
|
||||
.all(mw.ensureAuth, function(req,res,next){
|
||||
next();
|
||||
}).get(function(req,res,next){
|
||||
User.findById(req.session.passport.user, function(err, user){
|
||||
if (err){ mw.throwErr(req,err); }
|
||||
if (!user){ next(); }
|
||||
else if (req.session.returnTo && req.query.rd) {
|
||||
res.redirect(req.session.returnTo);
|
||||
delete req.session.returnTo;
|
||||
} else { res.render('dashboard.html', {
|
||||
user: user,
|
||||
success: req.flash('success')[0],
|
||||
error: req.flash('error')[0]
|
||||
}); }
|
||||
});
|
||||
}).post(function(req,res){
|
||||
User.findByIdAndUpdate(req.session.passport.user, {$set:{
|
||||
name: req.body.name,
|
||||
slug: slug(req.body.slug),
|
||||
settings: {
|
||||
units: req.body.units,
|
||||
defaultMap: req.body.map,
|
||||
defaultZoom: req.body.zoom,
|
||||
showSpeed: (req.body.showSpeed)?true:false,
|
||||
showAlt: (req.body.showAlt)?true:false,
|
||||
showStreetview: (req.body.showStreet)?true:false
|
||||
}
|
||||
}}, function(err, user){
|
||||
if (err) { mw.throwErr(req,err); }
|
||||
else { req.flash('success', 'Settings updated. '); }
|
||||
res.redirect('/dashboard');
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
|
@ -0,0 +1,43 @@
|
|||
var router = require('express').Router(),
|
||||
mail = require('../mail.js'),
|
||||
mw = require('../middleware.js');
|
||||
|
||||
router.route('/suggestion')
|
||||
.get(function(req,res){
|
||||
res.render('suggestion.html', {user:req.user});
|
||||
}).post(function(req,res){
|
||||
mail.sendSuggestion({
|
||||
name: (req.body.name)?req.body.name:req.user.name,
|
||||
email: (req.body.email)?req.body.email:req.user.email,
|
||||
suggestion: req.body.suggestion
|
||||
}, function (err, raw) {
|
||||
if (err){ mw.throwErr(req,err); }
|
||||
else { req.flash('success','Thanks for the suggestion! '); }
|
||||
res.redirect('/dashboard');
|
||||
});
|
||||
});
|
||||
|
||||
router.route('/bug')
|
||||
.all(mw.ensureAuth, function(req,res,next){
|
||||
next();
|
||||
}).get(function(req,res){
|
||||
res.render('bug.html', {
|
||||
user: req.user,
|
||||
errorMessage: req.flash('error-message')
|
||||
});
|
||||
}).post(function(req,res){
|
||||
mail.sendBugReport({
|
||||
source: (req.query.source)?req.body.name:'web',
|
||||
name: (req.body.name)?req.body.name:req.user.name,
|
||||
email: (req.body.email)?req.body.email:req.user.email,
|
||||
errorMessage: req.body.errorMessage,
|
||||
recreation: req.body.recreation,
|
||||
bug: req.body.bug
|
||||
}, function (err, raw) {
|
||||
if (err){ mw.throwErr(req,err); }
|
||||
else { req.flash('success','Thanks for the report! '); }
|
||||
res.redirect('/dashboard');
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
|
@ -0,0 +1,59 @@
|
|||
var router = require('express').Router(),
|
||||
mw = require('../middleware.js'),
|
||||
mail = require('../mail.js'),
|
||||
User = require('../models/user.js'),
|
||||
Request = require('../models/request.js');
|
||||
|
||||
router.route('/')
|
||||
.all(function(req,res,next){
|
||||
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); }
|
||||
if (!user){ next(); }
|
||||
res.render('index.html', {
|
||||
user: user,
|
||||
error: req.flash('error')[0],
|
||||
success: req.flash('succcess')[0]
|
||||
});
|
||||
});
|
||||
} else {
|
||||
res.render('index.html', {
|
||||
error: req.flash('error')[0],
|
||||
success: req.flash('success')[0],
|
||||
inviteSuccess: req.flash('request-success')[0],
|
||||
inviteError: req.flash('request-error')[0]
|
||||
});
|
||||
}
|
||||
}).post(function(req,res){
|
||||
Request.findOne({email:req.body.email}, function(err, request) {
|
||||
if (err){ mw.throwErr(req,err); }
|
||||
if (request){ // Already requested with this email
|
||||
req.flash('request-error', 'Invite already requested! ');
|
||||
res.redirect('/#get');
|
||||
} else { // Send new request
|
||||
request = new Request({
|
||||
name: req.body.name,
|
||||
email: req.body.email,
|
||||
beg: req.body.why,
|
||||
requestedTime: Date.now()
|
||||
}); request.save(function(err) {
|
||||
if (err){ mw.throwErr(req,err); }
|
||||
mail.mailgun.messages().send({
|
||||
from: 'Tracman Requests <requests@tracman.org>',
|
||||
to: 'Keith Irwin <tracman@keithirwin.us>',
|
||||
subject: 'New Tracman Invite request',
|
||||
html: '<p>'+req.body.name+' requested a Tracman invite. </p><p>'+req.body.why+'</p><p><a href="http://tracman.org/admin/requests">See all invites</a></p>',
|
||||
text: '\n'+req.body.name+' requested a Tracman invite. \n\n'+req.body.why+'\n\nhttp://tracman.org/admin/requests'
|
||||
}, function(err,body){
|
||||
if (err){ mw.throwErr(req,err); }
|
||||
else { req.flash('request-success', 'Invite requested! '); }
|
||||
res.redirect('/#get');
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
|
@ -0,0 +1,54 @@
|
|||
var router = require('express').Router(),
|
||||
mw = require('../middleware.js'),
|
||||
User = require('../models/user.js'),
|
||||
Request = require('../models/request.js');
|
||||
|
||||
router.get('/:invite', function(req,res,next){
|
||||
User.findOne({requestId:req.params.invite}, function(err, existingUser) { // User already accepted invite
|
||||
if (err) { console.log('routes.js:121 ERROR: '+err); }
|
||||
if (existingUser) { res.redirect('/login'); }
|
||||
else {
|
||||
Request.findById(req.params.invite, function(err, request) { // Check for granted invite
|
||||
if (err) { mw.throwErr(req,err); }
|
||||
if (!request) { next(); }
|
||||
else {
|
||||
new User({ // Create new user
|
||||
requestId: request._id,
|
||||
email: '',
|
||||
slug: request._id,
|
||||
name: request.name,
|
||||
created: Date.now(),
|
||||
settings: {
|
||||
units: 'imperial',
|
||||
showSpeed: false,
|
||||
showTemp: false,
|
||||
showAlt: false,
|
||||
showStreetview: true
|
||||
}
|
||||
}).save(function(err) {
|
||||
if (err) { mw.throwErr(req,err); }
|
||||
User.findOne({requestId:request._id}, function(err, user) {
|
||||
if (err) { mw.throwErr(req,err); }
|
||||
if (user) {
|
||||
request.userId = user._id;
|
||||
request.save(function(err, raw){
|
||||
if (err){ mw.throwErr(req,err); }
|
||||
});
|
||||
req.logIn(user, function(err) {
|
||||
if (err) { mw.throwErr(req,err); }
|
||||
user.lastLogin = Date.now();
|
||||
user.save(function(err, raw) {
|
||||
if (err) { mw.throwErr(req,err); }
|
||||
res.redirect('/login');
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
|
@ -0,0 +1,53 @@
|
|||
var router = require('express').Router(),
|
||||
mw = require('../middleware.js'),
|
||||
slug = require('slug'),
|
||||
User = require('../models/user.js');
|
||||
|
||||
router.get('/robots.txt', function(req,res){
|
||||
res.type('text/plain');
|
||||
res.send("User-agent: *\n"+
|
||||
"Disallow: /trac\n"+
|
||||
"Disallow: /dashboard\n"+
|
||||
"Disallow: /invited"
|
||||
);
|
||||
});
|
||||
|
||||
router.get('/validate', function(req,res){
|
||||
if (req.query.slug) { // validate unique slug
|
||||
User.findOne({slug:slug(req.query.slug)}, function(err, existingUser){
|
||||
if (err) { console.log('/validate error:',err); }
|
||||
if (existingUser && existingUser.id!==req.session.passport.user) { res.sendStatus(400); }
|
||||
else { res.sendStatus(200); }
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/android', mw.ensureAuth, function(req,res){
|
||||
res.redirect('https://play.google.com/store/apps/details?id=us.keithirwin.tracman');
|
||||
});
|
||||
|
||||
router.get('/license', function(req,res){
|
||||
res.render('license.html', {user:req.user});
|
||||
});
|
||||
|
||||
router.route('/pro')
|
||||
.all(mw.ensureAuth, function(req,res,next){
|
||||
next();
|
||||
}).get(function(req,res,next){
|
||||
User.findById(req.session.passport.user, function(err, user){
|
||||
if (err){ mw.throwErr(req,err); }
|
||||
if (!user){ next(); }
|
||||
else { res.render('pro.html', {user:user}); }
|
||||
});
|
||||
}).post(function(req,res){
|
||||
User.findByIdAndUpdate(req.session.passport.user,
|
||||
{$set:{ isPro:true }},
|
||||
function(err, user){
|
||||
if (err){ mw.throwErr(req,err); }
|
||||
else { req.flash('success','You have been signed up for pro. '); }
|
||||
res.redirect('/dashboard');
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
module.exports = router;
|
|
@ -0,0 +1,36 @@
|
|||
var router = require('express').Router(),
|
||||
mw = require('../middleware.js'),
|
||||
secret = require('../secrets.js'),
|
||||
User = require('../models/user.js');
|
||||
|
||||
router.get('/:slug', function(req,res,next){
|
||||
User.findOne({slug:req.params.slug}, function(err, tracuser) {
|
||||
if (err){ mw.throwErr(req,err); }
|
||||
if (!tracuser){ next(); }
|
||||
else { res.render('trac.html',{
|
||||
api: secret.mapAPI,
|
||||
user: req.user,
|
||||
tracuser: tracuser,
|
||||
noFooter: '1',
|
||||
noHeader: (req.query.noheader)?req.query.noheader.match(/\d/)[0]:'',
|
||||
disp: (req.query.disp)?req.query.disp.match(/\d/)[0]:'' // 0=map, 1=streetview, 2=both
|
||||
}); }
|
||||
});
|
||||
});
|
||||
|
||||
router.get('/', mw.ensureAuth, function(req,res,next){
|
||||
User.findById(req.session.passport.user, function(err, user){
|
||||
if (err){ mw.throwErr(req,err); }
|
||||
if (!user){ next(); }
|
||||
else { res.redirect('/trac/'+user.slug+((req.url.indexOf('?')<0)?'':('?'+req.url.split('?')[1]))); }
|
||||
});
|
||||
});
|
||||
router.get('/id/:id', function(req,res,next){
|
||||
User.findById(req.params.id, function(err, user){
|
||||
if (err){ mw.throwErr(req,err); }
|
||||
if (!user){ next(); }
|
||||
else { res.redirect('/trac/'+user.slug+((req.url.indexOf('?')<0)?'':('?'+req.url.split('?')[1]))); }
|
||||
});
|
||||
});
|
||||
|
||||
module.exports = router;
|
51
server.js
51
server.js
|
@ -1,4 +1,4 @@
|
|||
express = require('express'),
|
||||
var express = require('express'),
|
||||
crash = require('express-crash'),
|
||||
bodyParser = require('body-parser'),
|
||||
cookieParser = require('cookie-parser'),
|
||||
|
@ -8,7 +8,6 @@ express = require('express'),
|
|||
passport = require('passport'),
|
||||
flash = require('connect-flash'),
|
||||
secret = require('./config/secrets.js'),
|
||||
auth = require('./config/auth.js'),
|
||||
User = require('./config/models/user.js'),
|
||||
routes = require('./config/routes.js'),
|
||||
app = express(),
|
||||
|
@ -33,22 +32,38 @@ app.use(cookieParser(secret.cookie));
|
|||
app.use(flash());
|
||||
app.use(passport.initialize());
|
||||
app.use(passport.session());
|
||||
app.use('/static', express.static(__dirname+'/static'));
|
||||
routes(app);
|
||||
require('./config/auth.js');
|
||||
mongoose.connect(secret.mongoSetup, {
|
||||
server:{socketOptions:{ keepAlive:1, connectTimeoutMS:30000 }},
|
||||
replset:{socketOptions:{ keepAlive:1, connectTimeoutMS:30000 }}
|
||||
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
|
||||
var handle404 = function(err,req,res,next) {
|
||||
res.render('error.html', {code:404});
|
||||
};
|
||||
var handle500 = function(err,req,res,next) {
|
||||
res.render('error.html', {code:500});
|
||||
};
|
||||
if (secret.url.substring(0,16)!='http://localhost') {
|
||||
if (secret.url=='https://tracman.org') {
|
||||
var handle404 = function(err,req,res,next) {
|
||||
if (err) { console.log(err); }
|
||||
res.render('error.html', {code:404});
|
||||
};
|
||||
var handle500 = function(err,req,res,next) {
|
||||
if (err) { console.log(err); }
|
||||
res.render('error.html', {code:500});
|
||||
};
|
||||
app.use(crash.handle404(handle404));
|
||||
app.use(crash.handle500(handle500));
|
||||
crash.trapRoute(app);
|
||||
|
@ -79,7 +94,8 @@ io.on('connection', function(socket) {
|
|||
if (room.slice(0,4)!='app-'){
|
||||
User.findById({_id:room}, function(err, user) {
|
||||
if (err) { console.log(err); }
|
||||
if (user) { io.to('app-'+room).emit('activate','true'); }
|
||||
if (user) {
|
||||
io.to('app-'+room).emit('activate','true'); }
|
||||
});
|
||||
} else {
|
||||
checkForUsers(room.slice(4));
|
||||
|
@ -102,7 +118,8 @@ io.on('connection', function(socket) {
|
|||
});
|
||||
|
||||
socket.onclose = function(reason){
|
||||
var closedroom = Object.keys(socket.adapter.sids[socket.id]).slice(1)[0];
|
||||
var closedroom = Object.keys(
|
||||
socket.adapter.sids[socket.id]).slice(1)[0];
|
||||
setTimeout(function() {
|
||||
checkForUsers(closedroom);
|
||||
}, 3000);
|
||||
|
@ -123,8 +140,8 @@ passport.deserializeUser(function(id, done) {
|
|||
});
|
||||
|
||||
// SERVE
|
||||
http.listen(62054, function(){
|
||||
console.log('Listening for http on port 62054');
|
||||
http.listen(secret.port, function(){
|
||||
console.log('Listening at '+secret.url);
|
||||
checkForUsers();
|
||||
});
|
||||
|
||||
|
|
|
@ -52,10 +52,12 @@
|
|||
);
|
||||
{% endif %}
|
||||
|
||||
{% if usr.last %}
|
||||
{% if usr.last.time %}
|
||||
$('#{{ usr.id }}-moved').text(
|
||||
moment("{{ usr.last.time }}", "ddd MMM DD YYYY HH:mm:ss [GMT]ZZ").fromNow()
|
||||
);
|
||||
{% else %}
|
||||
$('#{{ usr.id }}-moved').text("never");
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</script>
|
||||
|
|
|
@ -50,12 +50,13 @@
|
|||
|
||||
<script>
|
||||
(function(t,r,a,c,m,o,n){t['GoogleAnalyticsObject']=m;t[m]=t[m]||function(){
|
||||
(t[m].q=t[m].q||[]).push(arguments)},t[m].l=1*new Date();o=r.createElement(a),
|
||||
n=r.getElementsByTagName(a)[0];o.async=1;o.src=c;n.parentNode.insertBefore(o,n)
|
||||
(t[m].q=t[m].q||[]).push(arguments);},t[m].l=1*new Date();o=r.createElement(a),
|
||||
n=r.getElementsByTagName(a)[0];o.async=1;o.src=c;n.parentNode.insertBefore(o,n);
|
||||
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
||||
ga('create', 'UA-44266909-3', 'auto');
|
||||
ga('require', 'linkid');
|
||||
ga('send', 'pageview');
|
||||
/* global ga */
|
||||
ga('create','UA-44266909-3','auto');
|
||||
ga('require','linkid');
|
||||
ga('send','pageview');
|
||||
</script>
|
||||
|
||||
</body>
|
||||
|
|
Loading…
Reference in New Issue