147 lines
2.8 KiB
JavaScript
147 lines
2.8 KiB
JavaScript
const AuthTokens = require('../authtokens');
|
|
const bcrypt = require('bcrypt');
|
|
|
|
|
|
class User
|
|
{
|
|
constructor(values)
|
|
{
|
|
var self = this;
|
|
|
|
self.id = values.id || values._id || null;
|
|
self.username = values.username || null;
|
|
self.password = values.password || null;
|
|
self.email = values.email || null;
|
|
self.auth = values.auth || [];
|
|
|
|
if (values.hasOwnProperty('active'))
|
|
self.active = (values.active === true);
|
|
else
|
|
self.active = true;
|
|
|
|
self.created = values.created || new Date();
|
|
self.createdByUserId = values.createdByUserId || null;
|
|
}
|
|
|
|
hasAuth(token)
|
|
{
|
|
return self.auth.includes(token);
|
|
}
|
|
}
|
|
|
|
|
|
class UserRepository
|
|
{
|
|
constructor(store)
|
|
{
|
|
var self = this;
|
|
self.store = store;
|
|
}
|
|
|
|
|
|
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(new User({
|
|
username: 'admin',
|
|
password: 'changeme',
|
|
auth: AuthTokens.all
|
|
}))
|
|
.then(() => { resolve() })
|
|
.catch((e) => { reject(e); });
|
|
}
|
|
else
|
|
resolve();
|
|
});
|
|
});
|
|
}
|
|
|
|
|
|
getLoginUser(username, password)
|
|
{
|
|
var self = this;
|
|
|
|
return new Promise((resolve, reject) =>
|
|
{
|
|
self.store.findOne({ username: username, active: true }, (err, doc) =>
|
|
{
|
|
if (err)
|
|
{
|
|
reject(err);
|
|
return;
|
|
}
|
|
|
|
if (doc == null)
|
|
{
|
|
resolve(false);
|
|
return;
|
|
}
|
|
|
|
bcrypt.compare(password, doc.hashedPassword, (err, res) =>
|
|
{
|
|
if (err)
|
|
reject(err)
|
|
else
|
|
resolve(res ? new User(doc) : null);
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
|
|
addUser(user)
|
|
{
|
|
var self = this;
|
|
|
|
return new Promise((resolve, reject) =>
|
|
{
|
|
bcrypt.hash(user.password, 10, function(err, hash)
|
|
{
|
|
if (err)
|
|
{
|
|
reject(err);
|
|
return;
|
|
}
|
|
|
|
self.store.insert({
|
|
username: user.username,
|
|
email: user.email,
|
|
hashedPassword: hash,
|
|
created: user.created,
|
|
createdByUserId: user.createdByUserId,
|
|
active: user.active,
|
|
auth: user.auth
|
|
}, (err, dbUser) =>
|
|
{
|
|
if (err)
|
|
{
|
|
reject(err);
|
|
return;
|
|
}
|
|
|
|
resolve(dbUser._id);
|
|
});
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
module.exports = {
|
|
User,
|
|
UserRepository
|
|
} |