72 lines
2.1 KiB
JavaScript
72 lines
2.1 KiB
JavaScript
var crypto = require('crypto');
|
|
var schemas = require("./schemas.js");
|
|
var _ = require("lodash");
|
|
|
|
var User = function(data) {
|
|
this.data = data;
|
|
}
|
|
|
|
User.prototype.data = {}
|
|
|
|
User.prototype.get = function (name) {
|
|
return this.data[name];
|
|
}
|
|
|
|
User.prototype.set = function (name, value) {
|
|
this.data[name] = value;
|
|
}
|
|
|
|
User.prototype.sanitize = function (data) {
|
|
data = data || {};
|
|
schema = schemas.user;
|
|
return _.pick(_.defaults(data, schema), _.keys(schema));
|
|
}
|
|
|
|
User.prototype.save = function (callback) {
|
|
var self = this;
|
|
this.data = this.sanitize(this.data);
|
|
db.collection("users").update({username:username},this.data, callback(err, count));
|
|
}
|
|
|
|
// Function to look up a user document by the users username
|
|
User.getByUsername = function (username, callback) {
|
|
console.log("Getting user document for: "+username);
|
|
db.collection("users").findOne({username:username}, function(err, doc) {
|
|
callback(null, new User(doc));
|
|
});
|
|
}
|
|
|
|
// Function to verify authentication via a username and password.
|
|
// Requires internal hashing function.
|
|
User.verify = function (username, password, callback) {
|
|
console.log("Verifying user: "+username);
|
|
db.collection("users").findOne({username: username}, function(err, doc) {
|
|
if (err || !doc) {
|
|
console.log("Username "+username+" does not exist");
|
|
console.log(err);
|
|
callback(err, null);
|
|
}
|
|
else {
|
|
console.log("Username "+username+" exists");
|
|
console.log(username + "'s salt is " + doc.salt);
|
|
var hash = hashPassword(password, doc.salt);
|
|
console.log(username+" is loging in with a hashed password of "+hash);
|
|
db.collection("users").findOne({username: username, password: hash},
|
|
function(err, doc) {
|
|
callback(err, doc);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
// Helper functions, internal to model
|
|
|
|
hashPassword = function(password, salt) {
|
|
var hash = crypto.createHash('sha256');
|
|
hash.update(password);
|
|
hash.update(salt);
|
|
return hash.digest('hex');
|
|
}
|
|
|
|
|
|
module.exports = User;
|