sync/auth.js

79 lines
2.4 KiB
JavaScript

/**
* Copyright 2013 Calvin 'calzoneman' Montgomery
*
* Licensed under Creative Commons Attribution-NonCommercial 3.0
* See http://creativecommons.org/licenses/by-nc/3.0/
*
*/
var mysql = require('mysql-libmysqlclient');
var Config = require('./config.js');
// Check if a name is taken
exports.isRegistered = function(name) {
var db = mysql.createConnectionSync();
db.connectSync(Config.MYSQL_SERVER, Config.MYSQL_USER,
Config.MYSQL_PASSWORD, Config.MYSQL_DB);
if(!db.connectedSync()) {
console.log("MySQL Connection Failed");
return true;
}
var query = 'SELECT * FROM registrations WHERE uname="{}"'
.replace(/\{\}/, name);
var results = db.querySync(query);
var rows = results.fetchAllSync();
db.closeSync();
return rows.length > 0;
}
// Check if a name is valid
// Valid names are 1-20 characters, alphanumeric and underscores
exports.validateName = function(name) {
if(name.length > 20)
return false;
const VALID_REGEX = /^[a-zA-Z0-9_]+$/;
return name.match(VALID_REGEX) != null;
}
// Try to register a new account
exports.register = function(name, sha256) {
if(!exports.validateName(name))
return false;
if(exports.isRegistered(name))
return false;
var db = mysql.createConnectionSync();
db.connectSync(Config.MYSQL_SERVER, Config.MYSQL_USER,
Config.MYSQL_PASSWORD, Config.MYSQL_DB);
if(!db.connectedSync()) {
console.log("MySQL Connection Failed");
return false;
}
var query = 'INSERT INTO registrations VALUES (NULL, "{1}", "{2}", 0)'
.replace(/\{1\}/, name)
.replace(/\{2\}/, sha256);
var results = db.querySync(query);
db.closeSync();
return results;
}
// Try to login
exports.login = function(name, sha256) {
var db = mysql.createConnectionSync();
db.connectSync(Config.MYSQL_SERVER, Config.MYSQL_USER,
Config.MYSQL_PASSWORD, Config.MYSQL_DB);
if(!db.connectedSync()) {
console.log("MySQL Connection Failed");
return false;
}
var query = 'SELECT * FROM registrations WHERE uname="{1}" AND pw="{2}"'
.replace(/\{1\}/, name)
.replace(/\{2\}/, sha256);
var results = db.querySync(query);
var rows = results.fetchAllSync();
db.closeSync();
if(rows.length > 0) {
return rows[0];
}
return false;
}