mirror of
https://github.com/openmax-server/server.git
synced 2026-05-26 13:31:43 +03:00
Различные фиксы (#14)
* Исключаем только ошибку валидации * Небольшие правки вебсокета тамтама * Теперь номера брутить чутка сложнее * Авторизация теперь проверяется для некоторых команд * Теперь проверяется orign у вебсокета тамтама * Дополнил пример env * Починил немного сокет тамтама
This commit is contained in:
@@ -48,8 +48,9 @@ class Processors:
|
||||
# Валидируем данные пакета
|
||||
try:
|
||||
HelloPayloadModel.model_validate(payload)
|
||||
except Exception as e:
|
||||
await self._send_error(seq, self.proto.HELLO, self.error_types.INVALID_PAYLOAD, writer)
|
||||
except pydantic.ValidationError as error:
|
||||
self.logger.error(f"Возникли ошибки при валидации пакета: {error}")
|
||||
await self._send_error(seq, self.proto.SESSION_INIT, self.error_types.INVALID_PAYLOAD, writer)
|
||||
return None, None
|
||||
|
||||
# Получаем данные из пакета
|
||||
@@ -86,7 +87,8 @@ class Processors:
|
||||
# Валидируем данные пакета
|
||||
try:
|
||||
PingPayloadModel.model_validate(payload)
|
||||
except Exception as e:
|
||||
except pydantic.ValidationError as error:
|
||||
self.logger.error(f"Возникли ошибки при валидации пакета: {error}")
|
||||
await self._send_error(seq, self.proto.PING, self.error_types.INVALID_PAYLOAD, writer)
|
||||
return
|
||||
|
||||
@@ -115,7 +117,8 @@ class Processors:
|
||||
# Валидируем данные пакета
|
||||
try:
|
||||
RequestCodePayloadModel.model_validate(payload)
|
||||
except Exception as e:
|
||||
except pydantic.ValidationError as error:
|
||||
self.logger.error(f"Возникли ошибки при валидации пакета: {error}")
|
||||
await self._send_error(seq, self.proto.AUTH_REQUEST, self.error_types.INVALID_PAYLOAD, writer)
|
||||
return
|
||||
|
||||
@@ -139,18 +142,15 @@ class Processors:
|
||||
await cursor.execute("SELECT * FROM users WHERE phone = %s", (phone,))
|
||||
user = await cursor.fetchone()
|
||||
|
||||
# Если пользователя нет - отдаем ошибку
|
||||
if user is None:
|
||||
await self._send_error(seq, self.proto.AUTH_REQUEST, self.error_types.USER_NOT_FOUND, writer)
|
||||
return
|
||||
# Если пользователя найден - сохраняем токен и отправляем код
|
||||
if user:
|
||||
# Сохраняем токен
|
||||
await cursor.execute("INSERT INTO auth_tokens (phone, token_hash, code_hash, expires) VALUES (%s, %s, %s, %s)", (phone, token_hash, code_hash, expires,))
|
||||
|
||||
# Сохраняем токен
|
||||
await cursor.execute("INSERT INTO auth_tokens (phone, token_hash, code_hash, expires) VALUES (%s, %s, %s, %s)", (phone, token_hash, code_hash, expires,))
|
||||
|
||||
# Если тг бот включен, и тг привязан к аккаунту - отправляем туда сообщение
|
||||
if self.telegram_bot and user.get("telegram_id"):
|
||||
await self.telegram_bot.send_code(chat_id=int(user.get("telegram_id")), phone=phone, code=code)
|
||||
|
||||
# Если тг бот включен, и тг привязан к аккаунту - отправляем туда сообщение
|
||||
if self.telegram_bot and user.get("telegram_id"):
|
||||
await self.telegram_bot.send_code(chat_id=int(user.get("telegram_id")), phone=phone, code=code)
|
||||
|
||||
# Данные пакета
|
||||
payload = {
|
||||
"requestMaxDuration": 60000,
|
||||
@@ -174,7 +174,8 @@ class Processors:
|
||||
# Валидируем данные пакета
|
||||
try:
|
||||
VerifyCodePayloadModel.model_validate(payload)
|
||||
except Exception as e:
|
||||
except pydantic.ValidationError as error:
|
||||
self.logger.error(f"Возникли ошибки при валидации пакета: {error}")
|
||||
await self._send_error(seq, self.proto.AUTH, self.error_types.INVALID_PAYLOAD, writer)
|
||||
return
|
||||
|
||||
@@ -263,7 +264,8 @@ class Processors:
|
||||
# Валидируем данные пакета
|
||||
try:
|
||||
LoginPayloadModel.model_validate(payload)
|
||||
except Exception as e:
|
||||
except pydantic.ValidationError as error:
|
||||
self.logger.error(f"Возникли ошибки при валидации пакета: {error}")
|
||||
await self._send_error(seq, self.proto.LOGIN, self.error_types.INVALID_PAYLOAD, writer)
|
||||
return
|
||||
|
||||
@@ -365,7 +367,8 @@ class Processors:
|
||||
# Валидируем данные пакета
|
||||
try:
|
||||
AssetsPayloadModel.model_validate(payload)
|
||||
except Exception as e:
|
||||
except pydantic.ValidationError as error:
|
||||
self.logger.error(f"Возникли ошибки при валидации пакета: {error}")
|
||||
await self._send_error(seq, self.proto.ASSETS_UPDATE, self.error_types.INVALID_PAYLOAD, writer)
|
||||
return
|
||||
|
||||
@@ -390,7 +393,8 @@ class Processors:
|
||||
# Валидируем данные пакета
|
||||
try:
|
||||
GetCallHistoryPayloadModel.model_validate(payload)
|
||||
except Exception as e:
|
||||
except pydantic.ValidationError as error:
|
||||
self.logger.error(f"Возникли ошибки при валидации пакета: {error}")
|
||||
await self._send_error(seq, self.proto.VIDEO_CHAT_HISTORY, self.error_types.INVALID_PAYLOAD, writer)
|
||||
return
|
||||
|
||||
@@ -417,7 +421,8 @@ class Processors:
|
||||
# Валидируем данные пакета
|
||||
try:
|
||||
SendMessagePayloadModel.model_validate(payload)
|
||||
except Exception as e:
|
||||
except pydantic.ValidationError as error:
|
||||
self.logger.error(f"Возникли ошибки при валидации пакета: {error}")
|
||||
await self._send_error(seq, self.proto.MSG_SEND, self.error_types.INVALID_PAYLOAD, writer)
|
||||
return
|
||||
|
||||
@@ -529,7 +534,8 @@ class Processors:
|
||||
# Валидируем данные пакета
|
||||
try:
|
||||
SyncFoldersPayloadModel.model_validate(payload)
|
||||
except Exception as e:
|
||||
except pydantic.ValidationError as error:
|
||||
self.logger.error(f"Возникли ошибки при валидации пакета: {error}")
|
||||
await self._send_error(seq, self.proto.FOLDERS_GET, self.error_types.INVALID_PAYLOAD, writer)
|
||||
return
|
||||
|
||||
@@ -597,7 +603,8 @@ class Processors:
|
||||
# Валидируем данные пакета
|
||||
try:
|
||||
SearchUsersPayloadModel.model_validate(payload)
|
||||
except Exception as e:
|
||||
except pydantic.ValidationError as error:
|
||||
self.logger.error(f"Возникли ошибки при валидации пакета: {error}")
|
||||
await self._send_error(seq, self.proto.CONTACT_INFO, self.error_types.INVALID_PAYLOAD, writer)
|
||||
return
|
||||
|
||||
@@ -658,7 +665,8 @@ class Processors:
|
||||
# Валидируем данные пакета
|
||||
try:
|
||||
SearchChatsPayloadModel.model_validate(payload)
|
||||
except Exception as e:
|
||||
except pydantic.ValidationError as error:
|
||||
self.logger.error(f"Возникли ошибки при валидации пакета: {error}")
|
||||
await self._send_error(seq, self.proto.CHAT_INFO, self.error_types.INVALID_PAYLOAD, writer)
|
||||
return
|
||||
|
||||
@@ -731,7 +739,8 @@ class Processors:
|
||||
# Валидируем данные пакета
|
||||
try:
|
||||
SearchByPhonePayloadModel.model_validate(payload)
|
||||
except Exception as e:
|
||||
except pydantic.ValidationError as error:
|
||||
self.logger.error(f"Возникли ошибки при валидации пакета: {error}")
|
||||
await self._send_error(seq, self.proto.CONTACT_INFO_BY_PHONE, self.error_types.INVALID_PAYLOAD, writer)
|
||||
return
|
||||
|
||||
@@ -800,7 +809,8 @@ class Processors:
|
||||
# Валидируем данные пакета
|
||||
try:
|
||||
GetCallTokenPayloadModel.model_validate(payload)
|
||||
except Exception as e:
|
||||
except pydantic.ValidationError as error:
|
||||
self.logger.error(f"Возникли ошибки при валидации пакета: {error}")
|
||||
await self._send_error(seq, self.proto.OK_TOKEN, self.error_types.INVALID_PAYLOAD, writer)
|
||||
return
|
||||
|
||||
@@ -813,7 +823,8 @@ class Processors:
|
||||
# Валидируем данные пакета
|
||||
try:
|
||||
TypingPayloadModel.model_validate(payload)
|
||||
except Exception as e:
|
||||
except pydantic.ValidationError as error:
|
||||
self.logger.error(f"Возникли ошибки при валидации пакета: {error}")
|
||||
await self._send_error(seq, self.proto.MSG_TYPING, self.error_types.INVALID_PAYLOAD, writer)
|
||||
return
|
||||
|
||||
@@ -867,7 +878,8 @@ class Processors:
|
||||
# Валидируем данные пакета
|
||||
try:
|
||||
ComplainReasonsGetPayloadModel.model_validate(payload)
|
||||
except Exception as e:
|
||||
except pydantic.ValidationError as error:
|
||||
self.logger.error(f"Возникли ошибки при валидации пакета: {error}")
|
||||
await self._send_error(seq, self.proto.COMPLAIN_REASONS_GET, self.error_types.INVALID_PAYLOAD, writer)
|
||||
return
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import asyncio, logging, traceback
|
||||
from oneme_tcp.proto import Proto
|
||||
from oneme_tcp.processors import Processors
|
||||
from common.tools import Tools
|
||||
|
||||
class OnemeMobileServer:
|
||||
def __init__(self, host="0.0.0.0", port=443, ssl_context=None, db_pool=None, clients={}, send_event=None, telegram_bot=None):
|
||||
@@ -13,6 +14,7 @@ class OnemeMobileServer:
|
||||
self.clients = clients
|
||||
|
||||
self.proto = Proto()
|
||||
self.auth_required = Tools().auth_required
|
||||
self.processors = Processors(db_pool=db_pool, clients=clients, send_event=send_event, telegram_bot=telegram_bot)
|
||||
|
||||
async def handle_client(self, reader, writer):
|
||||
@@ -54,6 +56,7 @@ class OnemeMobileServer:
|
||||
case self.proto.LOGIN:
|
||||
userPhone, userId, hashedToken = await self.processors.process_login(payload, seq, writer)
|
||||
|
||||
# Если авторизация на сервере успешная - можем завершить авторизацию
|
||||
if userPhone:
|
||||
await self._finish_auth(writer, address, userPhone, userId)
|
||||
case self.proto.LOGOUT:
|
||||
@@ -64,27 +67,49 @@ class OnemeMobileServer:
|
||||
case self.proto.LOG:
|
||||
await self.processors.process_telemetry(payload, seq, writer)
|
||||
case self.proto.ASSETS_UPDATE:
|
||||
await self.processors.process_get_assets(payload, seq, writer)
|
||||
await self.auth_required(
|
||||
userPhone, self.processors.process_get_assets, payload, seq, writer
|
||||
)
|
||||
case self.proto.VIDEO_CHAT_HISTORY:
|
||||
await self.processors.process_get_call_history(payload, seq, writer)
|
||||
await self.auth_required(
|
||||
userPhone, self.processors.process_get_call_history, payload, seq, writer
|
||||
)
|
||||
case self.proto.MSG_SEND:
|
||||
await self.processors.process_send_message(payload, seq, writer, senderId=userId, db_pool=self.db_pool)
|
||||
await self.auth_required(
|
||||
userPhone, self.processors.process_send_message, payload, seq, writer, senderId=userId, db_pool=self.db_pool
|
||||
)
|
||||
case self.proto.FOLDERS_GET:
|
||||
await self.processors.process_get_folders(payload, seq, writer, senderPhone=userPhone)
|
||||
await self.auth_required(
|
||||
userPhone, self.processors.process_get_folders, payload, seq, writer, senderPhone=userPhone
|
||||
)
|
||||
case self.proto.SESSIONS_INFO:
|
||||
await self.processors.process_get_sessions(payload, seq, writer, senderPhone=userPhone, hashedToken=hashedToken)
|
||||
await self.auth_required(
|
||||
userPhone, self.processors.process_get_sessions, payload, seq, writer, senderPhone=userPhone, hashedToken=hashedToken
|
||||
)
|
||||
case self.proto.CHAT_INFO:
|
||||
await self.processors.process_search_chats(payload, seq, writer, senderId=userId)
|
||||
await self.auth_required(
|
||||
userPhone, self.processors.process_search_chats, payload, seq, writer, senderId=userId
|
||||
)
|
||||
case self.proto.CONTACT_INFO_BY_PHONE:
|
||||
await self.processors.process_search_by_phone(payload, seq, writer, senderId=userId)
|
||||
await self.auth_required(
|
||||
userPhone, self.processors.process_search_by_phone, payload, seq, writer, senderId=userId
|
||||
)
|
||||
case self.proto.OK_TOKEN:
|
||||
await self.processors.process_get_call_token(payload, seq, writer)
|
||||
await self.auth_required(
|
||||
userPhone, self.processors.process_get_call_token, payload, seq, writer
|
||||
)
|
||||
case self.proto.MSG_TYPING:
|
||||
await self.processors.process_typing(payload, seq, writer, senderId=userId)
|
||||
await self.auth_required(
|
||||
userPhone, self.processors.process_typing, payload, seq, writer, senderId=userId
|
||||
)
|
||||
case self.proto.CONTACT_INFO:
|
||||
await self.processors.process_search_users(payload, seq, writer)
|
||||
await self.auth_required(
|
||||
userPhone, self.processors.process_search_users, payload, seq, writer
|
||||
)
|
||||
case self.proto.COMPLAIN_REASONS_GET:
|
||||
await self.processors.process_complain_reasons_get(payload, seq, writer)
|
||||
await self.auth_required(
|
||||
userPhone, self.processors.process_complain_reasons_get, payload, seq, writer
|
||||
)
|
||||
case _:
|
||||
self.logger.warning(f"Неизвестный опкод {opcode}")
|
||||
except Exception as e:
|
||||
|
||||
Reference in New Issue
Block a user