aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/modules/account-manager.js.old
diff options
context:
space:
mode:
Diffstat (limited to 'modules/account-manager.js.old')
-rw-r--r--modules/account-manager.js.old196
1 files changed, 196 insertions, 0 deletions
diff --git a/modules/account-manager.js.old b/modules/account-manager.js.old
new file mode 100644
index 0000000..b9cb1f9
--- /dev/null
+++ b/modules/account-manager.js.old
@@ -0,0 +1,196 @@
+
+var crypto = require('crypto')
+var MongoDB = require('mongodb').Db;
+var Server = require('mongodb').Server;
+var moment = require('moment');
+
+var dbPort = 27017;
+var dbHost = 'localhost';
+var dbName = 'DERStest';
+
+/* establish the database connection */
+
+var db = new MongoDB(dbName, new Server(dbHost, dbPort, {auto_reconnect: true}), {w: 1});
+ db.open(function(e, d){
+ if (e) {
+ console.log(e);
+ } else{
+ console.log('connected to database :: ' + dbName);
+ }
+});
+var accounts = db.collection('accounts');
+
+/* login validation methods */
+
+exports.autoLogin = function(user, pass, callback)
+{
+ accounts.findOne({user:user}, function(e, o) {
+ if (o){
+ o.pass == pass ? callback(o) : callback(null);
+ } else{
+ callback(null);
+ }
+ });
+}
+
+exports.manualLogin = function(user, pass, callback)
+{
+ accounts.findOne({user:user}, function(e, o) {
+ if (o == null){
+ callback('user-not-found');
+ } else{
+ validatePassword(pass, o.pass, function(err, res) {
+ if (res){
+ callback(null, o);
+ } else{
+ callback('invalid-password');
+ }
+ });
+ }
+ });
+}
+
+/* record insertion, update & deletion methods */
+
+exports.addNewAccount = function(newData, callback)
+{
+ accounts.findOne({user:newData.user}, function(e, o) {
+ if (o){
+ callback('username-taken');
+ } else{
+ accounts.findOne({email:newData.email}, function(e, o) {
+ if (o){
+ callback('email-taken');
+ } else{
+ saltAndHash(newData.pass, function(hash){
+ newData.pass = hash;
+ // append date stamp when record was created //
+ newData.date = moment().format('MMMM Do YYYY, h:mm:ss a');
+ accounts.insert(newData, {safe: true}, callback);
+ });
+ }
+ });
+ }
+ });
+}
+
+exports.updateAccount = function(newData, callback)
+{
+ accounts.findOne({user:newData.user}, function(e, o){
+ o.name = newData.name;
+ o.email = newData.email;
+ o.country = newData.country;
+ if (newData.pass == ''){
+ accounts.save(o, {safe: true}, callback);
+ } else{
+ saltAndHash(newData.pass, function(hash){
+ o.pass = hash;
+ accounts.save(o, {safe: true}, callback);
+ });
+ }
+ });
+}
+
+exports.updatePassword = function(email, newPass, callback)
+{
+ accounts.findOne({email:email}, function(e, o){
+ if (e){
+ callback(e, null);
+ } else{
+ saltAndHash(newPass, function(hash){
+ o.pass = hash;
+ accounts.save(o, {safe: true}, callback);
+ });
+ }
+ });
+}
+
+/* account lookup methods */
+
+exports.deleteAccount = function(id, callback)
+{
+ accounts.remove({_id: getObjectId(id)}, callback);
+}
+
+exports.getAccountByEmail = function(email, callback)
+{
+ accounts.findOne({email:email}, function(e, o){ callback(o); });
+}
+
+exports.validateResetLink = function(email, passHash, callback)
+{
+ accounts.find({ $and: [{email:email, pass:passHash}] }, function(e, o){
+ callback(o ? 'ok' : null);
+ });
+}
+
+exports.getAllRecords = function(callback)
+{
+ accounts.find().toArray(
+ function(e, res) {
+ if (e) callback(e)
+ else callback(null, res)
+ });
+};
+
+exports.delAllRecords = function(callback)
+{
+ accounts.remove({}, callback); // reset accounts collection for testing //
+}
+
+/* private encryption & validation methods */
+
+var generateSalt = function()
+{
+ var set = '0123456789abcdefghijklmnopqurstuvwxyzABCDEFGHIJKLMNOPQURSTUVWXYZ';
+ var salt = '';
+ for (var i = 0; i < 10; i++) {
+ var p = Math.floor(Math.random() * set.length);
+ salt += set[p];
+ }
+ return salt;
+}
+
+var md5 = function(str) {
+ return crypto.createHash('md5').update(str).digest('hex');
+}
+
+var saltAndHash = function(pass, callback)
+{
+ var salt = generateSalt();
+ callback(salt + md5(pass + salt));
+}
+
+var validatePassword = function(plainPass, hashedPass, callback)
+{
+ var salt = hashedPass.substr(0, 10);
+ var validHash = salt + md5(plainPass + salt);
+ callback(null, hashedPass === validHash);
+}
+
+/* auxiliary methods */
+
+var getObjectId = function(id)
+{
+ return accounts.db.bson_serializer.ObjectID.createFromHexString(id)
+}
+
+var findById = function(id, callback)
+{
+ accounts.findOne({_id: getObjectId(id)},
+ function(e, res) {
+ if (e) callback(e)
+ else callback(null, res)
+ });
+};
+
+
+var findByMultipleFields = function(a, callback)
+{
+// this takes an array of name/val pairs to search against {fieldName : 'value'} //
+ accounts.find( { $or : a } ).toArray(
+ function(e, results) {
+ if (e) callback(e)
+ else callback(null, results)
+ });
+}