You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
1.5 KiB
JavaScript

const pg = require('../pg')
const joinjs = require('join-js').default;
const debug = require('debug')('sos:db:user')
const mappings = require('../mappings')
const bcrypt = require('bcrypt')
const session = require('./session')
const user = module.exports = {}
const saltRounds = parseInt(process.env.PW_SALTROUNDS, 10) || 10
user.findById = async (user_uuid) => {
const query = {
text: 'select * from "user" where user_uuid = $1',
values: [
user_uuid
]
}
debug(query);
const {rows} = await pg.query(query)
return joinjs.map(rows, mappings, 'userMap', 'user_')[0];
}
user.findByEmail = async (email) => {
const query = {
text: 'select * from "user" where user_email = $1',
values: [
email
]
}
debug(query);
const {rows} = await pg.query(query)
return joinjs.map(rows, mappings, 'userMap', 'user_')[0]
}
user.register = async (email, password) => {
const hash = await bcrypt.hash(password, saltRounds)
const query = {
text: 'select * from sos.register_user($1, $2)',
values: [
email,
hash
]
}
debug(query);
const {rows} = await pg.query(query)
return joinjs.map(rows, mappings, 'userMap', 'user_')[0];
}
user.login = async (email, password) => {
const _user = await user.findByEmail(email)
if(!_user){
// Avoid early exit timing difference
await bcrypt.hash(password, saltRounds)
5 years ago
return null
}
const passwordCorrect = await bcrypt.compare(password, _user.password_hash)
if(!passwordCorrect)
5 years ago
return null
return _user
}