renew.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. const _ = require('lodash')
  2. const config = require('../../../config')
  3. const { User, Session } = require('../../database')
  4. const JWT = require('jsonwebtoken')
  5. const aguid = require('aguid')
  6. module.exports = {
  7. post: async (req, res) => {
  8. if (!req.user) return res.status(403).send('Not logged in')
  9. const user = await User.findOne({where: {id: req.user.id}})
  10. if (!user) return res.status(403).send(`Could not find user ${req.user.id}`)
  11. const session = await Session.findOne({ where: {id: req.claims.sid}})
  12. if (!session) return res.status(403).send(`Could not find session ${req.claims.sid}`)
  13. const permissions = _.chain(await user.getRoles({paranoid: !config.hiddenRoles}))
  14. .map(role => (role.permissions || '').split(','))
  15. .flatten()
  16. .uniq()
  17. .map(permission => [permission, 1])
  18. .fromPairs()
  19. .value()
  20. const sid = req.claims.sid
  21. const exp = Math.floor(Date.now()/1000) + config.auth.jwtExpires
  22. session.endAt = exp
  23. await session.save()
  24. const token = JWT.sign({
  25. sid,
  26. exp,
  27. ...permissions,
  28. user: user.sanitize()
  29. }, config.auth.jwtSecret);
  30. return res.status(200).send({
  31. user: user.sanitize(),
  32. token
  33. })
  34. }
  35. }