From 3e81a0a0f18e8a847585b8f6334f4903c5a265b3 Mon Sep 17 00:00:00 2001 From: Haydar Ghasemi Date: Sun, 6 Sep 2026 19:55:37 +0330 Subject: [PATCH] feature(chat): adding authentication adding authentication --- apps/chat/tests/test_participants_info.py | 4 +++- apps/chat/views/conversations.py | 25 +++++++++++++++-------- apps/chat/views/messages.py | 8 ++++++-- apps/chat/views/presign.py | 7 +++++-- apps/chat/views/read_state.py | 13 ++++++++---- apps/chat/views/reports.py | 7 +++++-- 6 files changed, 45 insertions(+), 19 deletions(-) diff --git a/apps/chat/tests/test_participants_info.py b/apps/chat/tests/test_participants_info.py index 8f24bd6..33c62ad 100644 --- a/apps/chat/tests/test_participants_info.py +++ b/apps/chat/tests/test_participants_info.py @@ -83,9 +83,10 @@ def test_user_conversation_list_view_enriches_participants_once_per_page( # ConversationService/MessageService/ReadStateService are mocked at the # class level so this stays a unit test of the participants_info wiring # and never opens a real connection to Mattermost. - from rest_framework.test import APIRequestFactory + from rest_framework.test import APIRequestFactory, force_authenticate from apps.chat.views.conversations import UserConversationListView + from apps.users.models import User user_1, user_2 = uuid.uuid4(), uuid.uuid4() mock_bulk.return_value = { @@ -102,6 +103,7 @@ def test_user_conversation_list_view_enriches_participants_once_per_page( mock_read_svc_cls.return_value.has_unread.return_value = False request = APIRequestFactory().get(f"/api/users/{user_1}/chats/") + force_authenticate(request, user=User.objects.create_user(pk=uuid.uuid4())) response = UserConversationListView.as_view()(request, user_uuid=user_1) assert response.status_code == 200 diff --git a/apps/chat/views/conversations.py b/apps/chat/views/conversations.py index 9150f2d..23b4c05 100644 --- a/apps/chat/views/conversations.py +++ b/apps/chat/views/conversations.py @@ -17,11 +17,14 @@ from apps.chat.services.account import AccountService from apps.chat.services.conversation import ConversationService from apps.chat.services.message import MessageService from apps.chat.services.read_state import ReadStateService +from apps.gooyal_oauth2.rest_framework import IsAuthenticatedOrTokenMatchesOASRequirements class ConversationCreateView(APIView): - authentication_classes = [] - permission_classes = [] + permission_classes = [IsAuthenticatedOrTokenMatchesOASRequirements] + required_alternate_scopes = { + "POST": [[]], + } @extend_schema( request=CreateConversationSerializer, @@ -45,8 +48,10 @@ class ConversationCreateView(APIView): class UserConversationListView(APIView): - authentication_classes = [] - permission_classes = [] + permission_classes = [IsAuthenticatedOrTokenMatchesOASRequirements] + required_alternate_scopes = { + "GET": [[]], + } @extend_schema( parameters=[ @@ -117,8 +122,10 @@ class UserConversationListView(APIView): class ConversationCloseView(APIView): - authentication_classes = [] - permission_classes = [] + permission_classes = [IsAuthenticatedOrTokenMatchesOASRequirements] + required_alternate_scopes = { + "POST": [[]], + } @extend_schema( request=ConversationUserActionSerializer, @@ -136,8 +143,10 @@ class ConversationCloseView(APIView): class ConversationReopenView(APIView): - authentication_classes = [] - permission_classes = [] + permission_classes = [IsAuthenticatedOrTokenMatchesOASRequirements] + required_alternate_scopes = { + "POST": [[]], + } @extend_schema( request=ConversationUserActionSerializer, diff --git a/apps/chat/views/messages.py b/apps/chat/views/messages.py index 5bc1aee..00f3783 100644 --- a/apps/chat/views/messages.py +++ b/apps/chat/views/messages.py @@ -8,11 +8,15 @@ from rest_framework.views import APIView from apps.chat.exceptions import ConversationClosedError from apps.chat.serializers.messages import MessageSerializer, SendMessageSerializer from apps.chat.services.message import MessageService +from apps.gooyal_oauth2.rest_framework import IsAuthenticatedOrTokenMatchesOASRequirements class MessageView(APIView): - authentication_classes = [] - permission_classes = [] + permission_classes = [IsAuthenticatedOrTokenMatchesOASRequirements] + required_alternate_scopes = { + "GET": [[]], + "POST": [[]], + } @extend_schema( request=SendMessageSerializer, diff --git a/apps/chat/views/presign.py b/apps/chat/views/presign.py index e6614af..372b315 100644 --- a/apps/chat/views/presign.py +++ b/apps/chat/views/presign.py @@ -5,11 +5,14 @@ from rest_framework.viewsets import GenericViewSet from apps.chat.serializers.presign import PresignResultSerializer, SignContentSerializer from apps.chat.services.storage import StorageService +from apps.gooyal_oauth2.rest_framework import IsAuthenticatedOrTokenMatchesOASRequirements class PresignViewSet(GenericViewSet): - authentication_classes = [] - permission_classes = [] + permission_classes = [IsAuthenticatedOrTokenMatchesOASRequirements] + required_alternate_scopes = { + "POST": [[]], + } serializer_class = SignContentSerializer @extend_schema( diff --git a/apps/chat/views/read_state.py b/apps/chat/views/read_state.py index b477941..14d7a9a 100644 --- a/apps/chat/views/read_state.py +++ b/apps/chat/views/read_state.py @@ -10,11 +10,14 @@ from rest_framework.views import APIView from apps.chat.serializers.messages import MessageSerializer from apps.chat.serializers.read_state import MarkReadSerializer, ReadStateSerializer from apps.chat.services.read_state import ReadStateService +from apps.gooyal_oauth2.rest_framework import IsAuthenticatedOrTokenMatchesOASRequirements class ReadStateView(APIView): - authentication_classes = [] - permission_classes = [] + permission_classes = [IsAuthenticatedOrTokenMatchesOASRequirements] + required_alternate_scopes = { + "POST": [[]], + } @extend_schema( request=MarkReadSerializer, @@ -43,8 +46,10 @@ class ReadStateView(APIView): class ChatEventsView(APIView): - authentication_classes = [] - permission_classes = [] + permission_classes = [IsAuthenticatedOrTokenMatchesOASRequirements] + required_alternate_scopes = { + "GET": [[]], + } @extend_schema( responses={200: MessageSerializer(many=True)}, diff --git a/apps/chat/views/reports.py b/apps/chat/views/reports.py index 519bba7..217243d 100644 --- a/apps/chat/views/reports.py +++ b/apps/chat/views/reports.py @@ -7,11 +7,14 @@ from rest_framework.views import APIView from apps.chat.serializers.reports import CreateReportSerializer, ReportSerializer from apps.chat.services.report import ReportService +from apps.gooyal_oauth2.rest_framework import IsAuthenticatedOrTokenMatchesOASRequirements class ConversationReportView(APIView): - authentication_classes = [] - permission_classes = [] + permission_classes = [IsAuthenticatedOrTokenMatchesOASRequirements] + required_alternate_scopes = { + "POST": [[]], + } @extend_schema( request=CreateReportSerializer,