test_authorization.py 3.4 KB

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