|
@@ -0,0 +1,115 @@
|
|
|
+from time import time
|
|
|
+from unittest.mock import Mock
|
|
|
+
|
|
|
+import pytest
|
|
|
+from django.contrib.messages import get_messages
|
|
|
+from django.test import override_settings
|
|
|
+
|
|
|
+from ..auth import (
|
|
|
+ TOKEN_KEY,
|
|
|
+ UPDATED_KEY,
|
|
|
+ authorize_admin,
|
|
|
+ is_admin_authorized,
|
|
|
+ remove_admin_authorization,
|
|
|
+ update_admin_authorization,
|
|
|
+)
|
|
|
+
|
|
|
+
|
|
|
+@pytest.fixture
|
|
|
+def admin_request(superuser):
|
|
|
+ request = Mock(session={}, user=superuser)
|
|
|
+ authorize_admin(request)
|
|
|
+ return request
|
|
|
+
|
|
|
+
|
|
|
+def test_authorizing_admin_updates_request_session(user):
|
|
|
+ request = Mock(session={}, user=user)
|
|
|
+ authorize_admin(request)
|
|
|
+ assert request.session
|
|
|
+
|
|
|
+
|
|
|
+def test_staff_user_can_be_authorized(staffuser):
|
|
|
+ request = Mock(session={}, user=staffuser)
|
|
|
+ authorize_admin(request)
|
|
|
+ assert is_admin_authorized(request)
|
|
|
+
|
|
|
+
|
|
|
+def test_non_staff_user_admin_authorization_is_never_valid(user):
|
|
|
+ request = Mock(session={}, user=user)
|
|
|
+ authorize_admin(request)
|
|
|
+ assert not is_admin_authorized(request)
|
|
|
+
|
|
|
+
|
|
|
+def test_anonymous_user_admin_authorization_is_never_valid(user, anonymous_user):
|
|
|
+ request = Mock(session={}, user=user)
|
|
|
+ authorize_admin(request)
|
|
|
+ request.user = anonymous_user
|
|
|
+ assert not is_admin_authorized(request)
|
|
|
+
|
|
|
+
|
|
|
+def test_superuser_without_staff_flag_admin_authorization_is_never_valid(
|
|
|
+ staffuser
|
|
|
+):
|
|
|
+ request = Mock(session={}, user=staffuser)
|
|
|
+ authorize_admin(request)
|
|
|
+ request.user.is_staff = False
|
|
|
+ assert not is_admin_authorized(request)
|
|
|
+
|
|
|
+
|
|
|
+def test_admin_authorization_is_invalidated_by_user_pk_change(
|
|
|
+ admin_request, superuser
|
|
|
+):
|
|
|
+ admin_request.user.pk = superuser.pk + 1
|
|
|
+ assert not is_admin_authorized(admin_request)
|
|
|
+
|
|
|
+
|
|
|
+def test_admin_authorization_is_invalidated_by_user_email_change(admin_request):
|
|
|
+ admin_request.user.email = "changed@example.com"
|
|
|
+ assert not is_admin_authorized(admin_request)
|
|
|
+
|
|
|
+
|
|
|
+def test_admin_authorization_is_invalidated_by_user_password_change(admin_request):
|
|
|
+ admin_request.user.set_password("changed-password")
|
|
|
+ assert not is_admin_authorized(admin_request)
|
|
|
+
|
|
|
+
|
|
|
+def test_admin_authorization_is_invalidated_by_secret_key_change(admin_request):
|
|
|
+ with override_settings(SECRET_KEY="changed-secret-key"):
|
|
|
+ assert not is_admin_authorized(admin_request)
|
|
|
+
|
|
|
+
|
|
|
+def test_admin_authorization_is_invalidated_by_token_change(admin_request):
|
|
|
+ admin_request.session[TOKEN_KEY] = "authorization-token-changed"
|
|
|
+ assert not is_admin_authorized(admin_request)
|
|
|
+
|
|
|
+
|
|
|
+@override_settings(MISAGO_ADMIN_SESSION_EXPIRATION=5)
|
|
|
+def test_admin_authorization_is_invalidated_by_token_expiration(admin_request):
|
|
|
+ admin_request.session[UPDATED_KEY] = time() - 5 * 60 - 1
|
|
|
+ assert not is_admin_authorized(admin_request)
|
|
|
+
|
|
|
+
|
|
|
+def test_updating_authorization_extends_authorization_expiration_time(admin_request):
|
|
|
+ admin_request.session[UPDATED_KEY] = 0
|
|
|
+ update_admin_authorization(admin_request)
|
|
|
+ assert admin_request.session[UPDATED_KEY]
|
|
|
+
|
|
|
+
|
|
|
+def test_updating_authorization_validates_authorization(admin_request):
|
|
|
+ admin_request.session[UPDATED_KEY] = 0
|
|
|
+ update_admin_authorization(admin_request)
|
|
|
+ assert is_admin_authorized(admin_request)
|
|
|
+
|
|
|
+
|
|
|
+def test_removing_authorization_removes_autorization_from_request_session(
|
|
|
+ admin_request
|
|
|
+):
|
|
|
+ admin_request.session[UPDATED_KEY] = 0
|
|
|
+ remove_admin_authorization(admin_request)
|
|
|
+ assert not admin_request.session
|
|
|
+
|
|
|
+
|
|
|
+def test_removing_authorization_invalidates_autorization(admin_request):
|
|
|
+ admin_request.session[UPDATED_KEY] = 0
|
|
|
+ remove_admin_authorization(admin_request)
|
|
|
+ assert not is_admin_authorized(admin_request)
|