73 lines
2.0 KiB
JavaScript
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)
|
|
}
|
|
}
|