2024-03-06 19:43:09 +00:00

28 lines
781 B
JavaScript

import bcrypt from "bcrypt"
import { User } from "@db_models"
export default async ({ username, password, hash }, user) => {
if (typeof user === "undefined") {
let isEmail = username.match(/^[^\s@]+@[^\s@]+\.[^\s@]+$/)
let query = isEmail ? { email: username } : { username: username }
user = await User.findOne(query).select("+password")
}
if (!user) {
throw new OperationError(401, "User not found")
}
if (typeof hash !== "undefined") {
if (user.password !== hash) {
throw new OperationError(401, "Invalid credentials")
}
} else {
if (!bcrypt.compareSync(password, user.password)) {
throw new OperationError(401, "Invalid credentials")
}
}
return user
}