#85 Switched to winston

master
Keith Irwin 2017-05-06 23:25:32 -04:00
parent e4ab43a29e
commit a23704367e
No known key found for this signature in database
GPG Key ID: 378933C743E2BBC0
8 changed files with 55 additions and 43 deletions

View File

@ -2,6 +2,10 @@
module.exports = {
// Log level
// See https://www.npmjs.com/package/winston#logging-levels
logLevel: 'verbose',
// Local variables
mode: 'development', // or production

View File

@ -3,7 +3,8 @@
const mongoose = require('mongoose'),
unique = require('mongoose-unique-validator'),
bcrypt = require('bcrypt'),
crypto = require('crypto');
crypto = require('crypto'),
winston = require('winston');
const userSchema = new mongoose.Schema({
name: {type:String},
@ -52,13 +53,13 @@ const userSchema = new mongoose.Schema({
// Create email confirmation token
userSchema.methods.createEmailToken = function(next){ // next(err,token)
//console.log('user.createEmailToken() called');
winston.debug('user.createEmailToken() called');
var user = this;
crypto.randomBytes(16, (err,buf)=>{
if (err){ next(err,null); }
if (buf){
//console.log(`Buffer ${buf.toString('hex')} created`);
winston.debug(`Buffer ${buf.toString('hex')} created`);
user.emailToken = buf.toString('hex');
user.save()
.then( ()=>{
@ -79,7 +80,7 @@ const userSchema = new mongoose.Schema({
// Reuse old token, resetting clock
if ( user.auth.passTokenExpires >= Date.now() ){
//console.log(`Reusing old password token...`);
winston.debug(`Reusing old password token...`);
user.auth.passTokenExpires = Date.now() + 3600000; // 1 hour
user.save()
.then( ()=>{
@ -92,7 +93,7 @@ const userSchema = new mongoose.Schema({
// Create new token
else {
//console.log(`Creating new password token...`);
winston.debug(`Creating new password token...`);
crypto.randomBytes(16, (err,buf)=>{
if (err){ return next(err,null,null); }
if (buf) {

View File

@ -8,6 +8,7 @@ const
GoogleTokenStrategy = require('passport-google-id-token'),
FacebookTokenStrategy = require('passport-facebook-token'),
TwitterTokenStrategy = require('passport-twitter-token'),
winston = require('winston'),
env = require('./env/env.js'),
mw = require('./middleware.js'),
User = require('./models.js').user;
@ -31,7 +32,7 @@ module.exports = (passport)=>{
passwordField: 'password',
passReqToCallback: true
}, (req,email,password,done)=>{
//console.log(`Perfoming local login for ${email}`);
winston.debug(`Perfoming local login for ${email}`);
User.findOne({'email':email})
.then( (user)=>{
@ -73,13 +74,13 @@ module.exports = (passport)=>{
// Social login
function socialLogin(req, service, profileId, done) {
//console.log(`socialLogin() called`);
winston.debug(`socialLogin() called`);
let query = {};
query['auth.'+service] = profileId;
// Intent to log in
if (!req.user) {
//console.log(`Logging in with ${service}...`);
winston.debug(`Logging in with ${service}...`);
User.findOne(query)
.then( (user)=>{
@ -124,7 +125,7 @@ module.exports = (passport)=>{
// No googleId either
else {
//console.log(`Couldn't find ${service} user.`);
winston.debug(`Couldn't find ${service} user.`);
req.session.flashType = 'warning';
req.session.flashMessage = `There's no user for that ${service} account. `;
return done();
@ -133,7 +134,7 @@ module.exports = (passport)=>{
// Successfull social login
else {
//console.log(`Found user: ${user}`);
winston.debug(`Found user: ${user}`);
req.session.flashType = 'success';
req.session.flashMessage = "You have been logged in.";
return done(null, user);
@ -148,7 +149,7 @@ module.exports = (passport)=>{
// Intent to connect account
else {
//console.log(`Attempting to connect ${service} account...`);
winston.debug(`Attempting to connect ${service} account...`);
// Check for unique profileId
User.findOne(query)
@ -156,7 +157,7 @@ module.exports = (passport)=>{
// Social account already in use
if (existingUser) {
//console.log(`${service} account already in use.`);
winston.debug(`${service} account already in use.`);
req.session.flashType = 'warning';
req.session.flashMessage = `Another user is already connected to that ${service} account. `;
return done();
@ -164,7 +165,7 @@ module.exports = (passport)=>{
// Connect to account
else {
//console.log(`Connecting ${service} account.`);
winston.debug(`Connecting ${service} account.`);
req.user.auth[service] = profileId;
req.user.save()
.then( ()=>{

View File

@ -7,6 +7,7 @@ const
crypto = require('crypto'),
moment = require('moment'),
slugify = require('slug'),
winston = require('winston'),
env = require('../env/env.js');
module.exports = (app, passport) => {
@ -18,14 +19,14 @@ module.exports = (app, passport) => {
failureFlash: true
},
loginCallback = (req,res)=>{
//console.log(`Login callback called... redirecting to ${req.session.next}`);
winston.debug(`Login callback called... redirecting to ${req.session.next}`);
req.flash(req.session.flashType,req.session.flashMessage);
req.session.flashType = undefined;
req.session.flashMessage = undefined;
res.redirect( req.session.next || '/map' );
},
appLoginCallback = (req,res,next)=>{
//console.log('appLoginCallback called.');
winston.debug('appLoginCallback called.');
if (req.user){ res.send(req.user); }
else {
let err = new Error("Unauthorized");
@ -267,19 +268,19 @@ module.exports = (app, passport) => {
// Social login
if (!req.user) {
//console.log(`Attempting to login with ${service} with params: ${JSON.stringify(sendParams)}...`);
winston.debug(`Attempting to login with ${service} with params: ${JSON.stringify(sendParams)}...`);
passport.authenticate(service, sendParams)(req,res,next);
}
// Connect social account
else if (!req.user.auth[service]) {
//console.log(`Attempting to connect ${service} account...`);
winston.debug(`Attempting to connect ${service} account...`);
passport.authorize(service, sendParams)(req,res,next);
}
// Disconnect social account
else {
//console.log(`Attempting to disconnect ${service} account...`);
winston.debug(`Attempting to disconnect ${service} account...`);
// Make sure the user has a password before they disconnect their google login account
// This is because login used to only be through google, and some people might not have

View File

@ -8,6 +8,7 @@ const slug = require('slug'),
User = require('../models.js').user,
mail = require('../mail.js'),
env = require('../env/env.js'),
winston = require('winston'),
router = require('express').Router();
// Validate email addresses
@ -51,23 +52,23 @@ router.route('/')
// Not unique!
if (existingUser && existingUser.id!==req.user.id) {
//console.log("Email not unique!");
winston.debug("Email not unique!");
req.flash('warning', `That email, <u>${req.body.email}</u>, is already in use by another user! `);
resolve();
}
// It's unique
else {
//console.log("Email is unique");
winston.debug("Email is unique");
req.user.newEmail = req.body.email;
// Create token
//console.log(`Creating email token...`);
winston.debug(`Creating email token...`);
req.user.createEmailToken((err,token)=>{
if (err){ reject(err); }
// Send token to user by email
//console.log(`Mailing new email token to ${req.body.email}...`);
winston.debug(`Mailing new email token to ${req.body.email}...`);
mail.send({
to: `"${req.user.name}" <${req.body.email}>`,
from: mail.from,
@ -132,7 +133,7 @@ router.route('/')
// Set settings when done
Promise.all([checkEmail, checkSlug])
.then( ()=>{
//console.log('Setting settings... ');
winston.debug('Setting settings... ');
// Set values
req.user.name = xss(req.body.name);
@ -147,10 +148,10 @@ router.route('/')
};
// Save user and send response
//console.log(`Saving new settings for user ${req.user.name}...`);
winston.debug(`Saving new settings for user ${req.user.name}...`);
req.user.save()
.then( ()=>{
//console.log(`DONE! Redirecting user...`);
winston.debug(`DONE! Redirecting user...`);
req.flash('success', 'Settings updated. ');
res.redirect('/settings');
})

View File

@ -1,20 +1,21 @@
'use strict';
// Imports
const User = require('./models.js').user;
const winston = require('winston'),
User = require('./models.js').user;
// Check for tracking clients
function checkForUsers(io, user) {
//console.log(`Checking for clients receiving updates for ${user}`);
winston.debug(`Checking for clients receiving updates for ${user}`);
// Checks if any sockets are getting updates for this user
if (Object.values(io.sockets.connected).some( (socket)=>{
return socket.gets===user;
})) {
//console.log(`Activating updates for ${user}.`);
winston.debug(`Activating updates for ${user}.`);
io.to(user).emit('activate','true');
} else {
//console.log(`Deactivating updates for ${user}.`);
winston.debug(`Deactivating updates for ${user}.`);
io.to(user).emit('activate', 'false');
}
}
@ -25,7 +26,7 @@ module.exports = {
init: (io)=>{
io.on('connection', (socket)=>{
//console.log(`${socket.id} connected.`);
winston.debug(`${socket.id} connected.`);
// Set a few variables
//socket.ip = socket.client.request.headers['x-real-ip'];
@ -33,14 +34,14 @@ module.exports = {
/* Log */
//socket.on('log', (text)=>{
//console.log(`LOG: ${text}`);
winston.debug(`LOG: ${text}`);
//});
// This socket can set location (app)
socket.on('can-set', (userId)=>{
//console.log(`${socket.id} can set updates for ${userId}.`);
winston.debug(`${socket.id} can set updates for ${userId}.`);
socket.join(userId, ()=>{
//console.log(`${socket.id} joined ${userId}`);
winston.debug(`${socket.id} joined ${userId}`);
});
checkForUsers( io, userId );
});
@ -48,16 +49,16 @@ module.exports = {
// This socket can receive location (map)
socket.on('can-get', (userId)=>{
socket.gets = userId;
//console.log(`${socket.id} can get updates for ${userId}.`);
winston.debug(`${socket.id} can get updates for ${userId}.`);
socket.join(userId, ()=>{
//console.log(`${socket.id} joined ${userId}`);
winston.debug(`${socket.id} joined ${userId}`);
socket.to(userId).emit('activate', 'true');
});
});
// Set location
socket.on('set', (loc)=>{
//console.log(`${socket.id} set location for ${loc.usr}`);
winston.debug(`${socket.id} set location for ${loc.usr}`);
loc.time = Date.now();
// Check for user and sk32 token
@ -80,7 +81,7 @@ module.exports = {
// Broadcast location
io.to(loc.usr).emit('get', loc);
//console.log(`Broadcasting ${loc.lat}, ${loc.lon} to ${loc.usr}`);
winston.debug(`Broadcasting ${loc.lat}, ${loc.lon} to ${loc.usr}`);
// Save in db as last seen
user.last = {
@ -102,11 +103,11 @@ module.exports = {
// Shutdown (check for remaining clients)
socket.on('disconnect', (reason)=>{
//console.log(`${socket.id} disconnected because of a ${reason}.`);
winston.debug(`${socket.id} disconnected because of a ${reason}.`);
// Check if client was receiving updates
if (socket.gets){
//console.log(`${socket.id} left ${socket.gets}`);
winston.debug(`${socket.id} left ${socket.gets}`);
checkForUsers( io, socket.gets );
}

View File

@ -9,7 +9,6 @@
"connect-flash-plus": "^0.2.1",
"cookie-parser": "^1.4.1",
"cookie-session": "^2.0.0-alpha.1",
"debug": "^2.6.6",
"express": "^4.15.2",
"express-validator": "^3.1.3",
"kerberos": "0.0.17",
@ -31,6 +30,7 @@
"passport-twitter-token": "^1.3.0",
"slug": "^0.9.1",
"socket.io": "^1.4.4",
"winston": "^2.3.1",
"xss": "^0.3.3"
},
"devDependencies": {

View File

@ -7,6 +7,7 @@ const
expressValidator = require('express-validator'),
cookieParser = require('cookie-parser'),
cookieSession = require('cookie-session'),
winston = require('winston'),
mongoose = require('mongoose'),
nunjucks = require('nunjucks'),
passport = require('passport'),
@ -14,13 +15,15 @@ const
env = require('./config/env/env.js'),
User = require('./config/models.js').user,
app = express(),
debug = require('debug')('tracman'),
http = require('http').Server(app),
io = require('socket.io')(http),
sockets = require('./config/sockets.js');
/* SETUP */ {
// Log level
winston.level = env.logLevel || 'info';
/* Database */ {
@ -81,7 +84,7 @@ const
let nextPath = ((req.query.next)?req.query.next: req.path.substring(0,req.path.indexOf('#')) || req.path );
if ( nextPath.substring(0,6)!=='/login' && nextPath.substring(0,7)!=='/logout' ){
req.session.next = nextPath+'#';
//console.log(`Set redirect path to ${nextPath}#`);
winston.debug(`Set redirect path to ${nextPath}#`);
}
// User account
@ -168,8 +171,8 @@ const
// Listen
http.listen( env.port, ()=>{
debug('Starting Tracman');
console.log(`🌐 Listening in ${env.mode} mode on port ${env.port}... `);
winston.verbose(`Log level set to ${env.logLevel}`);
// Check for clients for each user
User.find({})