isActiveSuperuser.tsx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import Cookies from 'js-cookie';
  2. import ConfigStore from 'sentry/stores/configStore';
  3. const SUPERUSER_COOKIE_NAME = window.superUserCookieName ?? 'su';
  4. const SUPERUSER_COOKIE_DOMAIN = window.superUserCookieDomain;
  5. /**
  6. * Checking for just isSuperuser on a config object may not be enough as backend
  7. * often checks for *active* superuser. We check both isSuperuser flag
  8. * AND superuser session cookie.
  9. *
  10. * Note that this function does not work all the time. It is possible to have
  11. * an expired superuser cookie.
  12. *
  13. * Documented here: https://getsentry.atlassian.net/browse/ER-1602
  14. */
  15. export function isActiveSuperuser() {
  16. const {isSuperuser} = ConfigStore.get('user') || {};
  17. if (isSuperuser) {
  18. const superUserCookieName =
  19. ConfigStore.get('superUserCookieName') || SUPERUSER_COOKIE_NAME;
  20. const superUserCookieDomain =
  21. ConfigStore.get('superUserCookieDomain') || SUPERUSER_COOKIE_DOMAIN;
  22. /**
  23. * Superuser cookie cannot be checked for existence as it is HttpOnly. As a workaround, we try
  24. * to change it to something else and if that fails we can assume that it's being present.
  25. */
  26. Cookies.set(superUserCookieName, 'set-in-isActiveSuperuser', {
  27. domain: superUserCookieDomain,
  28. });
  29. if (Cookies.get(superUserCookieName) === undefined) {
  30. return true;
  31. }
  32. }
  33. return false;
  34. }