authentication.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. const rp = require('request-promise');
  2. const params = require('../config/params');
  3. const db = require('./rethinkdb');
  4. const log = require('./log');
  5. const catsoop = require('./catsoop');
  6. const util = require('./util');
  7. function queue_permissions(user) {
  8. let permissions = new Set();
  9. switch (user.role) {
  10. case 'Admin':
  11. case 'Instructor':
  12. case 'TA':
  13. permissions.add('clear');
  14. /* falls through */
  15. case 'UTA':
  16. permissions.add('lock');
  17. permissions.add('notifications');
  18. permissions.add('show_claimed');
  19. permissions.add('check_in');
  20. permissions.add('auto_check_in');
  21. /* falls through */
  22. case 'LA':
  23. case 'SLA':
  24. permissions.add('queue_view_all');
  25. permissions.add('claim');
  26. permissions.add('checkoff');
  27. }
  28. return permissions;
  29. }
  30. const STAFF_ROLES = new Set([
  31. 'Admin',
  32. 'Instructor',
  33. 'TA',
  34. 'UTA',
  35. ]);
  36. function is_staff(user) {
  37. return STAFF_ROLES.has(user.role);
  38. }
  39. function validate_auth(auth) {
  40. log.debug('validate_auth', {auth});
  41. return catsoop
  42. .post('get_user_information', auth)
  43. .then(({user_info}) => {
  44. const user = user_info;
  45. user.permissions = util.union(new Set(user.permissions), queue_permissions(user));
  46. return user;
  47. });
  48. }
  49. module.exports = {
  50. is_staff,
  51. validate_auth,
  52. };