Recv/lib/repository/users.js

104 lines
1.8 KiB
JavaScript

class UsersRepository
{
constructor(store)
{
var self = this;
self.store = store;
}
async init()
{
var self = this;
return new Promise((resolve, reject) =>
{
// Initialize database if empty
self.store.count({}, (err, count) =>
{
if (err)
{
reject(err);
return;
}
if (count == 0)
self.addUser('admin', null, 'test', null);
resolve();
});
});
}
async isValidUser(username, password)
{
var self = this;
return new Promise((resolve, reject) =>
{
self.store.findOne({ username: username }, (err, doc) =>
{
if (err)
{
reject(err);
return;
}
if (doc == null)
{
resolve(false);
return;
}
bcrypt.compare(password, doc.password, (err, res) =>
{
if (err)
reject(err)
else
resolve(res);
});
});
});
}
async addUser(username, email, password, createdByUserId)
{
var self = this;
return new Promise((resolve, reject) =>
{
bcrypt.hash(password, 10, function(err, hash)
{
if (err)
{
reject(err);
return;
}
var user = {
username: username,
email: email,
password: hash,
created: new Date(),
createdByUserId: createdByUserId
};
self.store.insert(user, (err, dbUser) =>
{
if (err)
{
reject(err);
return;
}
resolve(dbUser._id);
});
});
});
}
}
module.exports = UsersRepository;