feature(chat): adding authentication

adding authentication
This commit is contained in:
Haydar Ghasemi 2026-09-06 19:55:37 +03:30
parent 9d9727008a
commit 3e81a0a0f1
6 changed files with 45 additions and 19 deletions

View file

@ -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

View file

@ -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,

View file

@ -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,

View file

@ -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(

View file

@ -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)},

View file

@ -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,