|
|
@ -4,6 +4,8 @@ const utils = require('../../utils/utils.js'); |
|
|
|
//update db
|
|
|
|
const sql = require('../../utils/sql'); |
|
|
|
|
|
|
|
const qs = require('querystring'); |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* Processes post data to see if the user has successfully |
|
|
@ -13,16 +15,20 @@ const sql = require('../../utils/sql'); |
|
|
|
* @param request |
|
|
|
* @returns {Promise} |
|
|
|
*/ |
|
|
|
const processLogin = function(request) |
|
|
|
const processLogin = function(request, clientAddress) |
|
|
|
{ |
|
|
|
return new Promise(function(resolve, reject) |
|
|
|
{ |
|
|
|
utils.getPostData(request).then(function(postData) |
|
|
|
{ |
|
|
|
const post = qs.parse(postData); |
|
|
|
if(!post.username && !post.password) |
|
|
|
{ |
|
|
|
resolve(""); |
|
|
|
} |
|
|
|
return sql.checkLogin(postData); |
|
|
|
}).then(function(loginResult) |
|
|
|
{ |
|
|
|
|
|
|
|
if(loginResult.pass) |
|
|
|
{ |
|
|
|
request.session.user = loginResult.user; |
|
|
@ -31,8 +37,9 @@ const processLogin = function(request) |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
console.log("password incorrect"); |
|
|
|
resolve("Password incorrect"); |
|
|
|
banIP(clientAddress); |
|
|
|
console.log("Invader!"); |
|
|
|
resolve("Wrong!"); |
|
|
|
} |
|
|
|
}).catch(function(err) |
|
|
|
{ |
|
|
@ -42,6 +49,54 @@ const processLogin = function(request) |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
/** Global Containing Ban Data **/ |
|
|
|
var banData = {}; |
|
|
|
|
|
|
|
/** Number of incorrect login attempts permitted per ip */ |
|
|
|
const LOGIN_LIMIT = 5; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* Determines if a client is banned from the server |
|
|
|
* or not. |
|
|
|
* |
|
|
|
* @param clientAddress |
|
|
|
*/ |
|
|
|
const isBanned = function(clientAddress) |
|
|
|
{ |
|
|
|
if(clientAddress in banData) |
|
|
|
{ |
|
|
|
user = banData[clientAddress]; |
|
|
|
|
|
|
|
return user.incorrectLogins > LOGIN_LIMIT; |
|
|
|
} |
|
|
|
return false; |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* Increments the user's incorrect login attempt |
|
|
|
* counter. |
|
|
|
* |
|
|
|
* @param clientAddress |
|
|
|
*/ |
|
|
|
const banIP = function(clientAddress) |
|
|
|
{ |
|
|
|
if(clientAddress in banData) |
|
|
|
{ |
|
|
|
user = banData[clientAddress]; |
|
|
|
user.incorrectLogins++; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
var newUser = new Object(); |
|
|
|
newUser.incorrectLogins = 1; |
|
|
|
banData[clientAddress] = newUser; |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
module.exports= |
|
|
|
{ |
|
|
|
/** |
|
|
@ -50,19 +105,27 @@ module.exports= |
|
|
|
* @param request express request containing post data |
|
|
|
* @returns {Promise} resolves html of login page |
|
|
|
*/ |
|
|
|
main: function(request) |
|
|
|
main: function(request, clientAddress) |
|
|
|
{ |
|
|
|
return new Promise(function(resolve, reject) |
|
|
|
if(isBanned(clientAddress)) |
|
|
|
{ |
|
|
|
Promise.all([utils.include("./admin/login/login.html"), |
|
|
|
require("../../sidebar/sidebar.js").main(), |
|
|
|
processLogin(request)]).then(function(html) |
|
|
|
{ |
|
|
|
resolve(html.join('') + "</div>"); |
|
|
|
}).catch(function(err) |
|
|
|
return utils.printBannedPage(); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
return new Promise(function(resolve, reject) |
|
|
|
{ |
|
|
|
reject(err); |
|
|
|
}) |
|
|
|
}); |
|
|
|
Promise.all([utils.include("./admin/login/login.html"), |
|
|
|
require("../../sidebar/sidebar.js").main(), |
|
|
|
processLogin(request, clientAddress)]).then(function(html) |
|
|
|
{ |
|
|
|
resolve(html.join('') + "</div>"); |
|
|
|
}).catch(function(err) |
|
|
|
{ |
|
|
|
reject(err); |
|
|
|
}) |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
}, |
|
|
|
}; |