Ejemplo n.º 1
0
    async def method_delete(self, request: Request, body: dict,
                            session: DBSession, mid: int, token: dict, *args,
                            **kwargs) -> BaseHTTPResponse:
        rights_holders = [
            messages_queries.get_sender(session, mid),
            messages_queries.get_recipient(session, mid)
        ]
        if rights_holders is None or token.get('uid') not in rights_holders:
            return await self.make_response_json(status=403)
        elif token.get('uid') == rights_holders[0]:
            try:
                messages_queries.get_message(session, message_id=mid)
                message = messages_queries.delete_message(session, mid)
            except DBMessageNotExistsException:
                raise SanicMessageNotFound('Message not found')
        else:
            try:
                messages_queries.get_message(session, message_id=mid)
                message = messages_queries.delete_message(
                    session, mid, attribute='is_delete_recipient')
            except DBMessageNotExistsException:
                raise SanicMessageNotFound('Message not found')

        try:
            session.commit_session()
        except (DBDataException, DBIntegrityException) as e:
            raise SanicDBException(str(e))

        return await self.make_response_json(status=204)
Ejemplo n.º 2
0
    async def method_patch(self, request: Request, body: dict,
                           session: DBSession, mid: int, token: dict, *args,
                           **kwargs) -> BaseHTTPResponse:

        right_holder = messages_queries.get_sender(session, mid)

        if right_holder is None or token.get('uid') != right_holder:
            return await self.make_response_json(status=403)

        request_model = RequestPatchMessageDto(body)

        try:
            messages_queries.get_message(session, mid)
            message = messages_queries.patch_message(session, request_model,
                                                     mid)
        except DBMessageNotExistsException:
            raise SanicMessageNotFound('Message not found')

        try:
            session.commit_session()
        except (DBDataException, DBIntegrityException) as e:
            raise SanicDBException(str(e))

        response_model = ResponseMessageDto(message)

        return await self.make_response_json(status=200,
                                             body=response_model.dump())
Ejemplo n.º 3
0
    async def method_patch(self, request: Request, body: dict,
                           session: DBSession, msg_id: int, token: dict, *args,
                           **kwargs) -> BaseHTTPResponse:

        # проверяем, что сообщение есть в БД и не удалено
        try:
            db_message = message_queries.get_message(session, msg_id)
        except DBMessageNotFoundException:
            raise SanicMessageNotFoundException('Message not found')
        except DBMessageDeletedException:
            raise SanicMessageDeletedException('Message deleted')

        # проверка на то, что пользователь редактирует сообщение, отправленное от его имени
        if token['id'] != db_message.sender_id:
            return await self.make_response_json(status=403)

        # проверяем, что пользователь не удален
        try:
            user_queries.get_user(session=session, user_id=token['id'])
        except DBUserDeletedException:
            raise SanicUserDeletedException('User deleted')

        request_model = RequestPatchMessageDto(body)

        message = message_queries.patch_message(session, request_model, msg_id)

        try:
            session.commit_session()
        except (DBIntegrityException, DBDataException) as error:
            raise SanicDBException(str(error))

        response_model = ResponseGetMessageDto(message)

        return await self.make_response_json(body=response_model.dump(),
                                             status=200)
Ejemplo n.º 4
0
    async def method_get(self, request: Request, body: dict,
                         session: DBSession, msg_id: int, token: dict, *args,
                         **kwargs) -> BaseHTTPResponse:

        try:
            db_message = message_queries.get_message(session,
                                                     msg_id,
                                                     is_read=True)
        except DBMessageNotFoundException:
            raise SanicMessageNotFoundException('Message not found')
        except DBMessageDeletedException:
            raise SanicMessageDeletedException('Message deleted')

        # проверка на то, что пользователь читает сообщение от своего имени
        if token['id'] != db_message.recipient_id:
            return await self.make_response_json(status=403)

        # проверяем, что пользователь не удален
        try:
            user_queries.get_user(session=session, user_id=token['id'])
        except DBUserDeletedException:
            raise SanicUserDeletedException('User deleted')

        # коммитим изменения (статус is_read)
        try:
            session.commit_session()
        except (DBIntegrityException, DBDataException) as error:
            raise SanicDBException(str(error))

        response_model = ResponseGetMessageDto(db_message)

        return await self.make_response_json(body=response_model.dump(),
                                             status=200)
Ejemplo n.º 5
0
 async def method_get(
         self, request: Request, body: dict, session, mid: int, token: dict, *args, **kwargs
 ) -> BaseHTTPResponse:
     try:
         db_message = message_queries.get_message(session, mid, uid=token.get("uid"))
     except (DBMessagesNoAccess, DBMessageNotExistsException):
         raise SanicResponseForbiddenException('message not found')
     response_model = ResponseMessageDto(db_message)
     return await self.make_response_json(status=200, body=response_model.dump())
Ejemplo n.º 6
0
    async def method_get(
            self, request: Request, body: dict, session: DBSession, token: dict, *args, **kwargs
    ) -> BaseHTTPResponse:
        db_messages = message_queries.get_message(session=session, user_id=token.get('id_auth'))

        response_body = {
            'received_messages': ResponseGetMessagesDtoSchema(many=True).dump(db_messages)
        }

        return await self.make_response_json(body=response_body, status=200)
Ejemplo n.º 7
0
    async def method_get(self, request: Request, body: dict,
                         session: DBSession, message_id: int, token: dict,
                         *args, **kwargs) -> BaseHTTPResponse:
        try:
            message = message_queries.get_message(session, message_id)
        except DBMessageNotExistsException:
            raise SanicMessagesNotFound('')

        recipient_id = message.recipient_id
        sender_id = message.sender_id

        if token.get('eid') != recipient_id and token.get('eid') != sender_id:
            return await self.make_response_json(status=403)

        try:
            message = message_queries.get_message(session, message_id)
        except DBMessageNotExistsException:
            raise SanicMessagesNotFound('Message not found')

        response_model = ResponseMessageDto(message)
        return await self.make_response_json(body=response_model.dump(),
                                             status=200)
Ejemplo n.º 8
0
    async def method_get(self, request: Request, body: dict,
                         session: DBSession, token: dict, mid: int, *args,
                         **kwargs) -> BaseHTTPResponse:
        try:
            db_message = message_queries.get_message(session=session, mid=mid)
        except DBMessageDoesntExistException:
            raise SanicMessageNotFound('message not found')

        if db_message.recipient_id == token.get(
                'id_auth') or db_message.sender_id == token.get('id_auth'):
            response_model = ResponseGetMessagesDto(db_message)
        else:
            return await self.make_response_json(status=403)

        return await self.make_response_json(body=response_model.dump(),
                                             status=200)
Ejemplo n.º 9
0
    async def method_get(self, request: Request, body: dict,
                         session: DBSession, message_id: int, *args,
                         **kwargs) -> BaseHTTPResponse:

        try:
            message = message_queries.get_message(session, message_id)
        except DBMessageNotExistsException as e:
            raise SanicDBException(str(e))
        if message.recipient_id != body['uid']:
            raise SanicUserConflictException("This message is not for you")

        message.file_ids = file_queries.get_file_ids_by_msd_id(
            session, message.id)
        response_model = ResponseGetMessageDto(message)

        return await self.make_response_json(body=response_model.dump(),
                                             status=200)
Ejemplo n.º 10
0
    async def method_get(self, request: Request, body: dict,
                         session: DBSession, message_id: int, *args,
                         **kwargs) -> BaseHTTPResponse:

        try:
            message = message_queries.get_message(session, message_id)
        except DBMessageNotExistsException:
            raise SanicMessageNotFound('Message not found')  # change

        if not (message.recipient_id == get_id_from_token(request)) and \
           not (message.sender_id == get_id_from_token(request)):
            raise SanicForbidden('You have no rights to read this message')

        response_model = ResponseMessageDto(message)

        return await self.make_response_json(status=200,
                                             body=response_model.dump())
Ejemplo n.º 11
0
    async def method_get(self, request: Request, body: dict,
                         session: DBSession, token: dict, message_id: int,
                         *args, **kwargs) -> BaseHTTPResponse:

        uid = token.get('uid')

        try:
            db_message = message_queries.get_message(session=session,
                                                     message_id=message_id,
                                                     user_id=uid)
        except DBMessageNotExistsException:
            raise SanicMessageNotFound('Message not found')

        response_model = ResponseMessageDto(db_message)

        return await self.make_response_json(status=200,
                                             body=response_model.dump())
Ejemplo n.º 12
0
    async def method_delete(self, request: Request, body: dict,
                            session: DBSession, token: dict, mid: int, *args,
                            **kwargs) -> BaseHTTPResponse:
        try:
            db_message = message_queries.get_message(session=session, mid=mid)
        except DBMessageDoesntExistException:
            raise SanicMessageNotFound('message not found')

        if db_message.sender_id != token.get('id_auth'):
            return await self.make_response_json(status=403)

        message_queries.delete_message(db_message)

        try:
            session.commit_session()
        except (DBDataError, DBIntegrityError) as error:
            raise SanicDBException(str(error))

        return await self.make_response_json(status=204, body=None)
Ejemplo n.º 13
0
    async def method_get(self, request: Request, body: dict,
                         session: DBSession, message_id: int, token: dict,
                         *args, **kwargs) -> BaseHTTPResponse:

        try:
            message = message_queries.get_message(session,
                                                  message_id=message_id)
        except DBMessageNotExistsException:
            raise SanicMessageNotFound('Message not found')

        employee_id = token["eid"]
        if message.sender_id != employee_id and message.recipient_id != employee_id:
            return await self.make_response_json(status=403,
                                                 message="Forbidden")

        response_message = ResponseMessageDto(message)

        return await self.make_response_json(status=200,
                                             body=response_message.dump())
Ejemplo n.º 14
0
    async def method_get(self, request: Request, body: dict,
                         session: DBSession, message_id, token: dict, *args,
                         **kwargs) -> BaseHTTPResponse:
        eid = token.get('eid')

        try:
            recipient_id = session.get_recipient_id_by_message(message_id)
        except AttributeError:
            raise DBMessageNotExistException("Message not found")

        if eid != recipient_id:
            raise SanicMessageForbidden("Not allowed")
        try:
            db_message = message_queries.get_message(session, message_id)
        except SanicMessageReadNotAllowedException as e:
            raise e
        response_model = ResponseMessageDto(db_message)

        return await self.make_response_json(body=response_model.dump())
Ejemplo n.º 15
0
    async def method_get(self, request: Request, body: dict,
                         session: DBSession, message_id: int, token: dict,
                         *args, **kwargs) -> BaseHTTPResponse:
        """
        Просмотр сообщения по его id
        """

        if token.get('user_id') != message_queries.check_user_by_message_id(
                session, message_id=message_id).sender_id:
            return await self.make_response_json(status=403)

        try:
            db_message = message_queries.get_message(session,
                                                     message_id=message_id)
        except DBMessageNotExistsException:
            raise SanicMessageNotFound('Message not found')
        response_model = ResponseMessageDto(db_message)

        return await self.make_response_json(body=response_model.dump(),
                                             status=201)
Ejemplo n.º 16
0
    async def method_get(self, request: Request, body: dict,
                         session: DBSession, mid: int, token: dict, *args,
                         **kwargs) -> BaseHTTPResponse:

        rights_holders = [
            messages_queries.get_sender(session, mid),
            messages_queries.get_recipient(session, mid)
        ]

        if rights_holders is None or token.get('uid') not in rights_holders:
            return await self.make_response_json(status=403)

        try:
            message = messages_queries.get_message(session, mid)
        except DBMessageNotExistsException:
            raise SanicMessageNotFound('Message not found')

        response_model = ResponseMessageDto(message)

        return await self.make_response_json(status=200,
                                             body=response_model.dump())
Ejemplo n.º 17
0
    async def method_delete(self, request: Request, body: dict,
                            session: DBSession, msg_id: int, token: dict,
                            *args, **kwargs) -> BaseHTTPResponse:

        # проверяем, что сообщение есть в БД и не удалено
        try:
            db_message = message_queries.get_message(session, msg_id)
        except DBMessageNotFoundException:
            raise SanicMessageNotFoundException('Message not found')
        except DBMessageDeletedException:
            raise SanicMessageDeletedException('Message deleted')

        # проверка на то, что пользователь пытается удалить сообщение, которое ему отправили
        if token['id'] != db_message.recipient_id:
            return await self.make_response_json(status=403)

        message_queries.delete_message(session, msg_id)

        try:
            session.commit_session()
        except (DBIntegrityException, DBDataException) as error:
            raise SanicDBException(str(error))

        return await self.make_response_json(status=204)
Ejemplo n.º 18
0
    async def method_delete(self, request: Request, body: dict,
                            session: DBSession, message_id: int, token: dict,
                            *args, **kwargs) -> BaseHTTPResponse:

        try:
            sender_id = message_queries.get_message(session,
                                                    message_id).sender_id
        except DBMessageNotExistsException:
            raise SanicMessagesNotFound('')

        if token.get('eid') != sender_id:
            return await self.make_response_json(status=403)

        try:
            message_queries.delete_message(session, message_id=message_id)
        except DBMessageNotExistsException:
            raise SanicMessagesNotFound('Message not found')

        try:
            session.commit_session()
        except (DBDataException, DBIntegrityException) as e:
            raise SanicDBException(str(e))

        return await self.make_response_json(status=204)