mirror of
https://github.com/openmax-server/server.git
synced 2026-05-22 19:41:41 +03:00
MAX: исправление уязвимости с избранными
This commit is contained in:
@@ -204,21 +204,22 @@ class Tools:
|
|||||||
|
|
||||||
if include_favourites:
|
if include_favourites:
|
||||||
# Получаем последнее сообщение из избранного
|
# Получаем последнее сообщение из избранного
|
||||||
|
favouriteChatId = -senderId
|
||||||
message, messageTime = await self.get_last_message(
|
message, messageTime = await self.get_last_message(
|
||||||
senderId, db_pool, protocol_type=protocol_type
|
favouriteChatId, db_pool, protocol_type=protocol_type
|
||||||
)
|
)
|
||||||
|
|
||||||
# ID избранного
|
# ID избранного для клиента
|
||||||
chatId = senderId ^ senderId
|
chatId = senderId ^ senderId
|
||||||
|
|
||||||
# Получаем последнюю активность участника (отправителя) в избранном
|
# Получаем последнюю активность в избранном
|
||||||
participants = await self.get_participant_last_activity(
|
participants = await self.get_participant_last_activity(
|
||||||
senderId, [senderId], db_pool
|
favouriteChatId, [senderId], db_pool
|
||||||
)
|
)
|
||||||
|
|
||||||
# Получаем ID предыдущего сообщения для избранного (чат ID = senderId)
|
# Получаем ID предыдущего сообщения для избранного
|
||||||
prevMessageId = await self.get_previous_message_id(
|
prevMessageId = await self.get_previous_message_id(
|
||||||
senderId, db_pool, protocol_type=protocol_type
|
favouriteChatId, db_pool, protocol_type=protocol_type
|
||||||
)
|
)
|
||||||
|
|
||||||
# Хардкодим в лист чатов избранное
|
# Хардкодим в лист чатов избранное
|
||||||
|
|||||||
@@ -23,16 +23,17 @@ class HistoryProcessors(BaseProcessor):
|
|||||||
messages = []
|
messages = []
|
||||||
|
|
||||||
# Если пользователь хочет получить историю из избранного,
|
# Если пользователь хочет получить историю из избранного,
|
||||||
# то выставляем в качестве ID чата его ID
|
# то выставляем в качестве ID чата отрицательный ID отправителя
|
||||||
if chatId == (senderId ^ senderId):
|
isFavourite = chatId == (senderId ^ senderId)
|
||||||
chatId = senderId
|
if isFavourite:
|
||||||
|
chatId = -senderId
|
||||||
|
|
||||||
# Проверяем, существует ли чат
|
# Проверяем, существует ли чат
|
||||||
async with self.db_pool.acquire() as conn:
|
async with self.db_pool.acquire() as conn:
|
||||||
async with conn.cursor() as cursor:
|
async with conn.cursor() as cursor:
|
||||||
# Проверяем состоит ли пользователь в чате,
|
# Проверяем состоит ли пользователь в чате,
|
||||||
# только в случае того, если это не избранное
|
# только в случае того, если это не избранное
|
||||||
if chatId != senderId:
|
if not isFavourite:
|
||||||
await cursor.execute("SELECT * FROM chats WHERE id = %s", (chatId,))
|
await cursor.execute("SELECT * FROM chats WHERE id = %s", (chatId,))
|
||||||
chat = await cursor.fetchone()
|
chat = await cursor.fetchone()
|
||||||
|
|
||||||
|
|||||||
@@ -88,9 +88,9 @@ class MessagesProcessors(BaseProcessor):
|
|||||||
chatId = userId ^ senderId
|
chatId = userId ^ senderId
|
||||||
|
|
||||||
# Если клиент хочет отправить сообщение в избранное,
|
# Если клиент хочет отправить сообщение в избранное,
|
||||||
# то выставляем в качестве ID чата ID отправителя
|
# то выставляем в качестве ID чата отрицательный ID отправителя
|
||||||
if chatId == (senderId ^ senderId):
|
if chatId == (senderId ^ senderId):
|
||||||
chatId = senderId
|
chatId = -senderId
|
||||||
participants = [senderId]
|
participants = [senderId]
|
||||||
else:
|
else:
|
||||||
# Если все таки клиент хочет отправить сообщение в нормальный чат,
|
# Если все таки клиент хочет отправить сообщение в нормальный чат,
|
||||||
@@ -143,7 +143,7 @@ class MessagesProcessors(BaseProcessor):
|
|||||||
participant,
|
participant,
|
||||||
{
|
{
|
||||||
"eventType": "new_msg",
|
"eventType": "new_msg",
|
||||||
"chatId": 0 if chatId == (senderId ^ senderId) else chatId,
|
"chatId": 0 if chatId == -senderId else chatId,
|
||||||
"message": bodyMessage,
|
"message": bodyMessage,
|
||||||
"prevMessageId": lastMessageId,
|
"prevMessageId": lastMessageId,
|
||||||
"time": messageTime,
|
"time": messageTime,
|
||||||
@@ -153,7 +153,7 @@ class MessagesProcessors(BaseProcessor):
|
|||||||
|
|
||||||
# Данные пакета
|
# Данные пакета
|
||||||
payload = {
|
payload = {
|
||||||
"chatId": 0 if chatId == senderId else chatId,
|
"chatId": 0 if chatId == -senderId else chatId,
|
||||||
"message": bodyMessage,
|
"message": bodyMessage,
|
||||||
"unread": 0,
|
"unread": 0,
|
||||||
"mark": messageTime
|
"mark": messageTime
|
||||||
|
|||||||
@@ -223,12 +223,12 @@ class SearchProcessors(BaseProcessor):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
# Получаем последнее сообщение из чата
|
# Получаем последнее сообщение из избранного
|
||||||
message, messageTime = await self.tools.get_last_message(
|
message, messageTime = await self.tools.get_last_message(
|
||||||
senderId, self.db_pool, protocol_type=self.type
|
-senderId, self.db_pool, protocol_type=self.type
|
||||||
)
|
)
|
||||||
|
|
||||||
# ID избранного
|
# ID избранного для клиента
|
||||||
chatId = senderId ^ senderId
|
chatId = senderId ^ senderId
|
||||||
|
|
||||||
# Добавляем чат в список
|
# Добавляем чат в список
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ class MessagesProcessors(BaseProcessor):
|
|||||||
participant,
|
participant,
|
||||||
{
|
{
|
||||||
"eventType": "new_msg",
|
"eventType": "new_msg",
|
||||||
"chatId": 0 if chatId == senderId else chatId,
|
"chatId": chatId,
|
||||||
"message": bodyMessage,
|
"message": bodyMessage,
|
||||||
"prevMessageId": lastMessageId,
|
"prevMessageId": lastMessageId,
|
||||||
"time": messageTime,
|
"time": messageTime,
|
||||||
@@ -145,7 +145,7 @@ class MessagesProcessors(BaseProcessor):
|
|||||||
|
|
||||||
# Данные пакета
|
# Данные пакета
|
||||||
payload = {
|
payload = {
|
||||||
"chatId": 0 if chatId == senderId else chatId,
|
"chatId": chatId,
|
||||||
"message": bodyMessage,
|
"message": bodyMessage,
|
||||||
"unread": 0,
|
"unread": 0,
|
||||||
"mark": messageTime
|
"mark": messageTime
|
||||||
|
|||||||
Reference in New Issue
Block a user