test_authorization.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. from time import time
  2. from unittest.mock import Mock
  3. import pytest
  4. from django.contrib.messages import get_messages
  5. from django.test import override_settings
  6. from ..auth import (
  7. TOKEN_KEY,
  8. UPDATED_KEY,
  9. authorize_admin,
  10. is_admin_authorized,
  11. remove_admin_authorization,
  12. update_admin_authorization,
  13. )
  14. @pytest.fixture
  15. def admin_request(superuser):
  16. request = Mock(session={}, user=superuser)
  17. authorize_admin(request)
  18. return request
  19. def test_authorizing_admin_updates_request_session(user):
  20. request = Mock(session={}, user=user)
  21. authorize_admin(request)
  22. assert request.session
  23. def test_staff_user_can_be_authorized(staffuser):
  24. request = Mock(session={}, user=staffuser)
  25. authorize_admin(request)
  26. assert is_admin_authorized(request)
  27. def test_non_staff_user_admin_authorization_is_never_valid(user):
  28. request = Mock(session={}, user=user)
  29. authorize_admin(request)
  30. assert not is_admin_authorized(request)
  31. def test_anonymous_user_admin_authorization_is_never_valid(user, anonymous_user):
  32. request = Mock(session={}, user=user)
  33. authorize_admin(request)
  34. request.user = anonymous_user
  35. assert not is_admin_authorized(request)
  36. def test_superuser_without_staff_flag_admin_authorization_is_never_valid(staffuser):
  37. request = Mock(session={}, user=staffuser)
  38. authorize_admin(request)
  39. request.user.is_staff = False
  40. assert not is_admin_authorized(request)
  41. def test_admin_authorization_is_invalidated_by_user_pk_change(admin_request, superuser):
  42. admin_request.user.pk = superuser.pk + 1
  43. assert not is_admin_authorized(admin_request)
  44. def test_admin_authorization_is_invalidated_by_user_email_change(admin_request):
  45. admin_request.user.email = "changed@example.com"
  46. assert not is_admin_authorized(admin_request)
  47. def test_admin_authorization_is_invalidated_by_user_password_change(admin_request):
  48. admin_request.user.set_password("changed-password")
  49. assert not is_admin_authorized(admin_request)
  50. def test_admin_authorization_is_invalidated_by_secret_key_change(admin_request):
  51. with override_settings(SECRET_KEY="changed-secret-key"):
  52. assert not is_admin_authorized(admin_request)
  53. def test_admin_authorization_is_invalidated_by_token_change(admin_request):
  54. admin_request.session[TOKEN_KEY] = "authorization-token-changed"
  55. assert not is_admin_authorized(admin_request)
  56. @override_settings(MISAGO_ADMIN_SESSION_EXPIRATION=5)
  57. def test_admin_authorization_is_invalidated_by_token_expiration(admin_request):
  58. admin_request.session[UPDATED_KEY] = time() - 5 * 60 - 1
  59. assert not is_admin_authorized(admin_request)
  60. def test_updating_authorization_extends_authorization_expiration_time(admin_request):
  61. admin_request.session[UPDATED_KEY] = 0
  62. update_admin_authorization(admin_request)
  63. assert admin_request.session[UPDATED_KEY]
  64. def test_updating_authorization_validates_authorization(admin_request):
  65. admin_request.session[UPDATED_KEY] = 0
  66. update_admin_authorization(admin_request)
  67. assert is_admin_authorized(admin_request)
  68. def test_removing_authorization_removes_autorization_from_request_session(
  69. admin_request
  70. ):
  71. admin_request.session[UPDATED_KEY] = 0
  72. remove_admin_authorization(admin_request)
  73. assert not admin_request.session
  74. def test_removing_authorization_invalidates_autorization(admin_request):
  75. admin_request.session[UPDATED_KEY] = 0
  76. remove_admin_authorization(admin_request)
  77. assert not is_admin_authorized(admin_request)