url-minify/backend/controllers/user.js

73 lines
2.0 KiB
JavaScript

const User = require('../models/user')
const { customAlphabet } = require('nanoid')
const nanoid = customAlphabet('1234567890abcdefghijklmnopqrstuvwxyz', 25)
module.exports.register = async ({ body: { email, password,name } }, res) => {
try {
if (!email || !password) return res.sendStatus(400)
let oldUser = await User.findOne({ email }).catch((err) => {
console.error(err)
})
if (oldUser) return res.status(400).send('Already Exists')
let user = new User({ email,name })
user.setPassword(password)
let validationError = false
await user.save().catch((err) => {
validationError = true
return res.sendStatus(400)
})
if (!validationError) return res.send(user.generateJWT())
} catch (e) {
console.log(e)
return res.sendStatus(500)
}
}
module.exports.login = async ({ body: { email, password } }, res) => {
try {
if (!email || !password) return res.sendStatus(400)
let user = await User.findOne({ email }).catch((err) =>
console.error(err)
)
if (user && user.validatePassword(password))
return res.json({ access_token: user.generateJWT() })
return res.status(401).send(null)
} catch (err) {
console.log(err)
return res.sendStatus(500)
}
}
module.exports.me = async (req, res) => {
try {
if (!req.user.isAuthenticated) {
res.sendStatus(401)
return
}
let user = req.user.data
res.send({
email: user.email,
name: user.name,
phone: user.phone,
})
} catch (e) {
console.log(e)
return res.sendStatus(500)
}
}
module.exports.generateAPIKey = async (req, res) => {
try {
if (!req.user.isAuthenticated) {
res.sendStatus(401)
return
}
let user = req.user.data
let apiKey = nanoid()
user.apiKey = apiKey
await user.save()
res.json(user.apiKey)
} catch (e) {
console.log(e)
return res.sendStatus(500)
}
}