verify.js 982 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. /**
  2. *
  3. * @param {*} permissions Series of permissions or arrays of permissions, any of which must be fully satisfied to pass.
  4. *
  5. * Example: verify('A', ['B', 'C']) means: A OR (B AND C)
  6. */
  7. const verify = (...permissions) => (req, res, next) => {
  8. const verified = !!req.user
  9. if (!verified) {
  10. if (process.env.SKIP_AUTH) {
  11. console.warn(`Skipping auth on ${req.path}`)
  12. if (next) next()
  13. return true
  14. }
  15. if (res) res.status(403).end()
  16. return false
  17. } else {
  18. if (permissions && permissions.length) {
  19. for (let permission of permissions) {
  20. if (
  21. (typeof permission === 'string' && req.claims[permission])
  22. || (Array.isArray(permission) && permission.every(p => req.claims[permission]))
  23. ) {
  24. if (next) next()
  25. return true
  26. }
  27. }
  28. if (res) res.status(401).end()
  29. return false
  30. }
  31. if (next) next()
  32. return true
  33. }
  34. return verified
  35. }
  36. module.exports = verify