gancio-upstream/server/api/auth.js

49 lines
1.4 KiB
JavaScript
Raw Normal View History

2019-04-03 00:25:12 +02:00
const jwt = require('jsonwebtoken')
const { Op } = require('sequelize')
const config = require('./config')
const User = require('./models/user')
const Auth = {
fillUser(req, res, next) {
const token =
2019-04-23 15:45:52 +02:00
req.body.token || req.params.token || req.headers.authorization
2019-04-03 00:25:12 +02:00
if (!token) return next()
jwt.verify(token, config.secret, async (err, decoded) => {
if (err) return next()
req.user = await User.findOne({
where: { email: { [Op.eq]: decoded.email }, is_active: true }
})
next()
})
},
isAuth(req, res, next) {
const token =
(req.body && req.body.token) ||
req.params.token ||
2019-04-23 15:45:52 +02:00
req.headers.authorization
2019-04-03 00:25:12 +02:00
if (!token) return res.status(403).send({ message: 'Token not found' })
jwt.verify(token, config.secret, async (err, decoded) => {
if (err) {
return res
.status(403)
.send({ message: 'Failed to authenticate token ' + err })
}
req.user = await User.findOne({
where: { email: { [Op.eq]: decoded.email }, is_active: true }
})
if (!req.user) {
return res
.status(403)
.send({ message: 'Failed to authenticate token ' + err })
}
next()
})
},
isAdmin(req, res, next) {
if (req.user.is_admin && req.user.is_active) return next()
return res.status(403).send({ message: 'Admin needed' })
}
}
module.exports = Auth