# Pastebin 4iR6ZAfK exports.cleanUserForClient = function (dbUser) { const { password, deleted, ...returnUser } = dbUser return returnUser } exports.validateUser = async function (email, password) { const user = await findByEmail(email) const success = await bcrypt.compare(password, user.password) return success ? user : success } exports.createNewUser = async function (username, password) { if (!username || !password) return Promise.reject(new Error("Username and Password must be valid.")) const hash = await bcrypt.hash(password, saltRounds) // return shipQuery("INSERT INTO users set ? ", { username, hash }) const length = hash.length const result = await shipQuery("call user_create(null, ?, ?, '', '', ?)", [username, username, hash]) return result[0][0] } exports.findUserByAuthToken = async function (token) { // return shipQuery("SELECT u.* FROM Users u LEFT JOIN AuthTokens a on a.userGuid = u.guid WHERE a.token = UNHEX(?)", token). const results = await shipQuery("call token_get_user(?)", token) console.log('findUserByAuthToken', results) if (results && results[0] && results[0][0]) { console.log('found user', results[0][0]) return results[0][0] } } exports.findByEmail = findByEmail = async function (email) { if (!email) return Promise.reject(new Error("email is required.")) // return shipQuery("SELECT HEX(guid) as guid, username, email, password, created, deleted FROM Users WHERE email = ? ", [ const rows = await shipQuery("SELECT HEX(guid) as guid, username, email, password, created, deleted FROM Users WHERE email = ? ", [ email ]) return rows.length > 0 ? rows[0] : undefined }