gancio/app/auth.js

33 lines
1.3 KiB
JavaScript
Raw Normal View History

2019-02-26 00:02:42 +01:00
const jwt = require('jsonwebtoken')
const config = require('./config')
const User = require('./models/user')
2019-03-10 01:01:23 +01:00
const { Op } = require('sequelize')
2019-02-26 00:02:42 +01:00
const Auth = {
2019-03-07 14:59:28 +01:00
async fillUser (req, res, next) {
const token = req.body.token || req.params.token || req.headers['x-access-token']
2019-03-10 01:01:23 +01:00
if (!token) return next()
2019-03-07 14:59:28 +01:00
jwt.verify(token, config.secret, async (err, decoded) => {
2019-03-10 01:01:23 +01:00
if (err) return next()
req.user = await User.findOne({ where: { email: { [Op.eq]: decoded.email }, is_active: true } })
2019-03-07 14:59:28 +01:00
next()
})
},
2019-02-26 00:02:42 +01:00
async isAuth (req, res, next) {
const token = req.body.token || req.params.token || req.headers['x-access-token']
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 })
2019-03-10 01:01:23 +01:00
req.user = await User.findOne({ where: { email: { [Op.eq]: decoded.email }, is_active: true } })
2019-03-05 15:17:12 +01:00
if (!req.user) return res.status(403).send({ message: 'Failed to authenticate token ' + err })
2019-02-26 00:02:42 +01:00
next()
})
},
async isAdmin (req, res, next) {
2019-03-05 15:17:12 +01:00
if (req.user.is_admin && req.user.is_active) return next()
2019-02-26 00:02:42 +01:00
return res.status(403).send({ message: 'Admin needed' })
}
}
module.exports = Auth