multy-stub/server/routers/stc-22-24/routes/auth.js

48 lines
1.6 KiB
JavaScript

const authRouter = require('express').Router()
const jwt = require('jsonwebtoken')
const bcrypt = require('bcrypt')
const { JWT_TOKEN, SALT } = require('./key')
const { getResponse } = require('../utils/common')
const { getUsers, addUser, getUserByEmail } = require('../controller')
const checkRequiredMidleware = require('../midlewares/checkRequired.midleware')
authRouter.get('/users', async (req, res) => {
let error = null
const dishData = await getUsers().catch((e) => error = e.message)
res.send(getResponse(error, dishData))
})
authRouter.post(
'/register',
checkRequiredMidleware(['email', 'password']),
async (req, res) => {
const { email, password } = req.body
const hash = await bcrypt.hash(password, SALT)
let error = null
const user = await addUser({ email, hash }).catch((e) => error = e.message)
res.send(getResponse(error, user))
},
)
authRouter.post(
'/login',
checkRequiredMidleware(['email', 'password']),
async (req, res) => {
const { email, password } = req.body;
let error = null
const user = await getUserByEmail({ email }).catch((e) => error = e.message)
if (user) {
const passwordCorrect = await bcrypt.compare(password, user.hash)
if (passwordCorrect) {
// eslint-disable-next-line no-undef
const token = jwt.sign({ email }, JWT_TOKEN)
res.send({ email, token })
return
}
}
res.status(400).send('Incorrect email or password')
},
)
module.exports = authRouter