From b4063aa0bf305d6bc281d057bafc40b00f004066 Mon Sep 17 00:00:00 2001 From: Grant Bartlett Date: Sun, 5 Feb 2017 12:30:19 +0000 Subject: [PATCH 1/2] added email to become the unique identifier of accounts --- src/server/lib/player/auth.js | 53 ++++++++++++++++++----------------- src/server/routes/auth.js | 11 ++++++-- 2 files changed, 36 insertions(+), 28 deletions(-) diff --git a/src/server/lib/player/auth.js b/src/server/lib/player/auth.js index 666d5ab..fa0e4d6 100644 --- a/src/server/lib/player/auth.js +++ b/src/server/lib/player/auth.js @@ -5,22 +5,22 @@ var debug = require('debug')('wol:leaderboard'), games = require(global.cwd + '/lib/games'), _sanitize = require('./lib/sanitize'); -module.exports = function auth(player, username, password) { +module.exports = function auth(email, password, nick) { return new Promise(function(resolve, reject) { - if (!username || !password) { + if (!email || !password) { return reject(); } var $auth = $db.get('auth'); - player ? playerAuth() : regularAuth(); + nick ? playerAuth() : regularAuth(); /////////////////// function regularAuth() { - $auth.findOne({username: username, password: password}, function(err, data) { + $auth.findOne({email: email, password: password}, function(err, data) { - /* unable to find user/pass combo*/ + /* unable to find email/pass combo*/ if (!data) return reject(); /* remove sensitive data from reply */ @@ -31,58 +31,59 @@ module.exports = function auth(player, username, password) { } function playerAuth() { - player = player.toLowerCase(); + email = email.toLowerCase(); - $auth.findOne({handles: {$in: [_sanitize(player, true)]}}, function(err, data) { + $auth.findOne({handles: {$in: [_sanitize(nick, true)]}}, function(err, data) { data = data || {}; /* success if player enters correct user/pass */ - if (data.username === username && data.password === password) { + if (data.email === email && data.password === password) { return resolve(); } - /* if player is already associated to another username, reject */ - if (data.username && data.username !== username) { + if (data.email && data.email !== email) + { + console.log("auth: incorrect email"); return reject(); } - /* check to see if the username exists */ - $auth.findOne({username: username}, function(err, res) { + /* update existing email */ + $auth.findOne({email: email}, function(err, res) { res = res || {}; /* if we already have a user/pass reject */ - if (res.username && res.password !== password) { + if (res.email && res.password !== password) { return reject(); } - /* if username exists, add new handle */ - if (res.username) { - $auth.update({username: username}, { + /* if email exists, add new handle */ + if (res.email) { + $auth.update({email: email}, { $push: { - handles: player + handles: nick } }); - debug('auth entry updated for %s', username); + debug('auth entry updated for %s', email); resolve(); - associate(player, username); + associate(nick, email); return; } /* otherwise create auth entry */ var entry = { - username: username, + email: email, password: password, registered: Date.now(), handles: [ - player + nick ] }; $auth.insert(entry).success(function() { - debug('auth entry created for %s', username); + debug('auth entry created for %s', email); resolve(); - associate(player, username); + associate(nick, email); }); }); }); @@ -91,18 +92,18 @@ module.exports = function auth(player, username, password) { }; /* add uid to given player in all supported games */ -function associate(player, username) { +function associate(player, email) { games.supported.forEach(function(game) { var $players = $db.get(game + '_players'); $players.findOne({name: _sanitize(player, true)}, function(err, data) { data = data || {}; /* associate if not already claimed */ - if (!data.username) { + if (!data.email) { $players.update({name: player}, { $set: { name: player, - username: username + email: email } }, {upsert: true}); } diff --git a/src/server/routes/auth.js b/src/server/routes/auth.js index 1a3f9f5..718626c 100644 --- a/src/server/routes/auth.js +++ b/src/server/routes/auth.js @@ -28,8 +28,15 @@ exports.required = function(req, res, next) { res.end(); }; - if (!credentials.name || !credentials.pass) return _error(); - player.auth(nick, credentials.name, credentials.pass).then(_success, _error); + if (!credentials.name || !credentials.pass) + { + console.log(credentials); + console.log("No Email or Password in Auth Request"); + return _error(); + } + + /* name = email */ + player.auth(credentials.name, credentials.pass, nick).then(_success, _error); }; exports.hof = function(req, res, next) { From 591b33331332a99228c24bf29317a3703ea6a98d Mon Sep 17 00:00:00 2001 From: Grant Bartlett Date: Sun, 5 Feb 2017 13:04:39 +0000 Subject: [PATCH 2/2] formatting fix and console log replaced with debug, to keep consistent --- src/server/lib/player/auth.js | 5 ++--- src/server/routes/auth.js | 7 ++----- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/server/lib/player/auth.js b/src/server/lib/player/auth.js index fa0e4d6..a54ab27 100644 --- a/src/server/lib/player/auth.js +++ b/src/server/lib/player/auth.js @@ -41,9 +41,8 @@ module.exports = function auth(email, password, nick) { return resolve(); } - if (data.email && data.email !== email) - { - console.log("auth: incorrect email"); + if (data.email && data.email !== email) { + debug("auth: incorrect email"); return reject(); } diff --git a/src/server/routes/auth.js b/src/server/routes/auth.js index 718626c..dc46ed2 100644 --- a/src/server/routes/auth.js +++ b/src/server/routes/auth.js @@ -28,14 +28,11 @@ exports.required = function(req, res, next) { res.end(); }; - if (!credentials.name || !credentials.pass) - { - console.log(credentials); - console.log("No Email or Password in Auth Request"); + if (!credentials.name || !credentials.pass) { return _error(); } - /* name = email */ + /* credentials.name = email */ player.auth(credentials.name, credentials.pass, nick).then(_success, _error); };