users.security.tests.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. /* eslint-env mocha */
  2. import { expect } from 'chai';
  3. import { isUserUpdateAllowed, hasForbiddenUserUpdateField } from '/models/users';
  4. describe('users security', function() {
  5. describe('isUserUpdateAllowed', function() {
  6. it('allows username update', function() {
  7. expect(isUserUpdateAllowed(['username'])).to.equal(true);
  8. });
  9. it('allows profile updates', function() {
  10. expect(isUserUpdateAllowed(['profile.fullname'])).to.equal(true);
  11. expect(isUserUpdateAllowed(['profile.avatarUrl', 'profile.language'])).to.equal(true);
  12. });
  13. it('denies other top-level fields', function() {
  14. expect(isUserUpdateAllowed(['orgs'])).to.equal(false);
  15. expect(isUserUpdateAllowed(['teams'])).to.equal(false);
  16. expect(isUserUpdateAllowed(['loginDisabled'])).to.equal(false);
  17. expect(isUserUpdateAllowed(['authenticationMethod'])).to.equal(false);
  18. expect(isUserUpdateAllowed(['services'])).to.equal(false);
  19. expect(isUserUpdateAllowed(['emails'])).to.equal(false);
  20. expect(isUserUpdateAllowed(['isAdmin'])).to.equal(false);
  21. });
  22. });
  23. describe('hasForbiddenUserUpdateField', function() {
  24. it('flags forbidden sensitive fields', function() {
  25. expect(hasForbiddenUserUpdateField(['orgs'])).to.equal(true);
  26. expect(hasForbiddenUserUpdateField(['teams'])).to.equal(true);
  27. expect(hasForbiddenUserUpdateField(['loginDisabled'])).to.equal(true);
  28. expect(hasForbiddenUserUpdateField(['authenticationMethod'])).to.equal(true);
  29. expect(hasForbiddenUserUpdateField(['services.facebook'])).to.equal(true);
  30. expect(hasForbiddenUserUpdateField(['emails.0.verified'])).to.equal(true);
  31. expect(hasForbiddenUserUpdateField(['roles'])).to.equal(true);
  32. expect(hasForbiddenUserUpdateField(['isAdmin'])).to.equal(true);
  33. expect(hasForbiddenUserUpdateField(['createdThroughApi'])).to.equal(true);
  34. expect(hasForbiddenUserUpdateField(['sessionData.totalHits'])).to.equal(true);
  35. });
  36. it('does not flag allowed fields', function() {
  37. expect(hasForbiddenUserUpdateField(['username'])).to.equal(false);
  38. expect(hasForbiddenUserUpdateField(['profile.fullname'])).to.equal(false);
  39. });
  40. });
  41. });