brestok's picture
Add encryption and decryption for sensitive message data
40749a1
Raw History Blame Contribute Delete
2.18 kB
from fastapi import Depends
from trauma.api.account.dto import AccountType
from trauma.api.account.model import AccountModel
from trauma.api.common.dto import Paging
from trauma.api.message import message_router
from trauma.api.message.ai.engine import search_entities
from trauma.api.message.db_requests import get_all_chat_messages_obj, update_message_feedback_obj
from trauma.api.message.dto import Feedback
from trauma.api.message.model import MessageModel
from trauma.api.message.schemas import (AllMessageWrapper,
AllMessageResponse,
CreateMessageRequest)
from trauma.core.security import PermissionDependency
from trauma.core.wrappers import TraumaResponseWrapper
from trauma.api.message.utils import decrypt_messages
@message_router.get('/{chatId}/all')
async def get_all_chat_messages(
chatId: str,
account: AccountModel = Depends(PermissionDependency([AccountType.Admin, AccountType.User])),
) -> AllMessageWrapper:
messages, _ = await get_all_chat_messages_obj(chatId, account)
response = AllMessageResponse(
paging=Paging(pageSize=len(messages), pageIndex=0, totalCount=len(messages)),
data=messages
)
return AllMessageWrapper(data=response)
@message_router.post('/{chatId}')
async def create_message(
chatId: str,
message_data: CreateMessageRequest,
account: AccountModel = Depends(PermissionDependency([AccountType.Admin, AccountType.User]))
) -> TraumaResponseWrapper[MessageModel]:
messages, chat = await get_all_chat_messages_obj(chatId, account)
messages = decrypt_messages(messages)
response = await search_entities(message_data.text, messages, chat)
return TraumaResponseWrapper(data=response)
@message_router.patch('/{messageId}/feedback')
async def create_feedback(
messageId: str,
feedback_data: Feedback,
_: AccountModel = Depends(PermissionDependency([AccountType.Admin, AccountType.User]))
) -> TraumaResponseWrapper[MessageModel]:
message = await update_message_feedback_obj(messageId, feedback_data)
return TraumaResponseWrapper(data=message)