36 lines
961 B
JavaScript
36 lines
961 B
JavaScript
const User = require('../models/User');
|
|
const argon2 = require('argon2');
|
|
|
|
async function usernameTaken(username) {
|
|
return await User.exists({ username });
|
|
}
|
|
|
|
async function getUserByUsername(username) {
|
|
return await User.findOne({ username });
|
|
}
|
|
|
|
async function checkPassword(username, password) {
|
|
const user = await User.findOne({ username });
|
|
if (!user) return false;
|
|
return await argon2.verify(user.passwordHash, password);
|
|
}
|
|
|
|
async function createUser(username, password) {
|
|
if (await usernameTaken(username)) return null;
|
|
const hash = await argon2.hash(password);
|
|
const newUser = new User({ username, passwordHash: hash });
|
|
return await newUser.save();
|
|
}
|
|
|
|
async function updatePassword(userId, newPassword) {
|
|
const hash = await argon2.hash(newPassword);
|
|
return await User.findByIdAndUpdate(userId, { passwordHash: hash });
|
|
}
|
|
|
|
module.exports = {
|
|
usernameTaken,
|
|
getUserByUsername,
|
|
checkPassword,
|
|
createUser,
|
|
updatePassword
|
|
};
|