Skip to content
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
9034485
Различные фиксы (#14)
starwear3000 Mar 11, 2026
1ec1d49
Merge branch 'master' into dev/0.1.0
starwear3000 Mar 11, 2026
07dd71b
Теперь все должно работать исправно
starwear3000 Mar 12, 2026
9004566
Merge branch 'master' into dev/0.1.0
starwear3000 Mar 12, 2026
66fb40a
Merge branch 'master' into dev/0.1.0
WowInceptionGood Mar 12, 2026
db3b732
Merge branch 'dev/0.1.0' of https://github.com/openmax-server/server …
WowInceptionGood Mar 12, 2026
301e55b
Документация: описал про SESSION_INIT
WowInceptionGood Mar 12, 2026
81f5fb7
Update deviceId description in tamtam_ws.md
starwear3000 Mar 12, 2026
d4d5dd5
feat: 16 опкод для обновления профиля
zavolo Mar 15, 2026
2d09f52
feat: 23 опкод для регистрации, смс шлюз, докер
zavolo Mar 15, 2026
d5ea45c
SQLite: Ошибка
WowInceptionGood Mar 15, 2026
91453d7
Серверный конфиг снова сломался
starwear3000 Mar 18, 2026
9c3038b
Починил изменение профиля
starwear3000 Mar 18, 2026
09c1f8b
История сообщений (вроде как даже работает)
starwear3000 Mar 18, 2026
c7eace4
Дополнил немного 48 опкод, и починил отдачу истории в избранном (избр…
starwear3000 Mar 18, 2026
2dab853
Доделал авторизацию в ТамТаме
starwear3000 Mar 18, 2026
6c05b5f
Швырнул архитектуру, чтобы позже объединить контроллеры веба и сокета…
starwear3000 Mar 18, 2026
11b2e27
Удалил tamtam.proto, поскольку нигде больше не используется
starwear3000 Mar 18, 2026
9bc6c15
Поделил процессоры в таме
starwear3000 Mar 19, 2026
bbee49d
Коды стран
starwear3000 Mar 19, 2026
2cf18b8
Генерируем айди, за вместо того, чтобы писать его попорядку
starwear3000 Mar 19, 2026
ef512b0
Вынес список участников чата в отдельную таблицу
starwear3000 Mar 21, 2026
8d7a1da
Теперь мы не должны отправлять 128 опкод самому себе. вроде
starwear3000 Mar 22, 2026
f2e7e37
ТамТам: реализация 32 опкода. Надеюсь, будет работать
starwear3000 Mar 22, 2026
aa6411b
ТамТам: обработчик 5 и 1 опкода
starwear3000 Mar 22, 2026
a8732b5
ТамТам: починил 32 опкод и добавил серверный конфиг. Избранное больше…
starwear3000 Mar 22, 2026
5fcc569
TT: oops
starwear3000 Mar 22, 2026
f4ea147
MAX: заглушка в 158 опкоде
starwear3000 Mar 22, 2026
ac76015
Common: поправил 1 прикол
starwear3000 Mar 27, 2026
7a2e5a2
TamTam: websocket transport for web version
starwear3000 Mar 27, 2026
0b7282b
TamTam && MAX: история (в мохе она вроде теперь получше работает)
starwear3000 Mar 27, 2026
4014bab
Правка контроллеров небольшая
starwear3000 Mar 27, 2026
e5607ad
MAX: Разделил процессоры
starwear3000 Mar 29, 2026
0f5c06f
TG Bot: переписал на aiogram
starwear3000 Mar 30, 2026
5294960
Common: фикс года
starwear3000 Apr 3, 2026
0ffc649
Начальная реализация транспорта ws для max web и прочие улучшения
starwear3000 Apr 7, 2026
dcbcb0a
Common: добавил сжатие lz4
starwear3000 Apr 10, 2026
448b854
Исправление конфликтов
WowInceptionGood Apr 10, 2026
d9cbafc
TT: фикс вебсокета
starwear3000 Apr 12, 2026
d9798a6
Fix OpenMAX mobile compatibility and Telegram auth fallback (#30)
gohryt Apr 14, 2026
4121bd0
MAX: заглушка для баннеров, правка пакета со списком жалоб, отдача ко…
starwear3000 Apr 20, 2026
4abe6de
oops
starwear3000 Apr 20, 2026
9fcba1a
MAX: Рабочие баннеры
starwear3000 Apr 24, 2026
35a4101
MAX: обновление настроек приватности
starwear3000 Apr 24, 2026
5613341
MAX: пуши через firebase (особо не тестил, вроде работает)
starwear3000 Apr 24, 2026
227f90c
MAX: Рефактор папок
starwear3000 Apr 24, 2026
810d480
MAX: фикс версий < 25.8.0
starwear3000 Apr 24, 2026
cd9ba98
MAX: отдача черного списка
starwear3000 Apr 24, 2026
cb058f6
Теперь ID пользователей идут по порядку, как и раньше
starwear3000 Apr 25, 2026
bd95755
MAX: создание папок
starwear3000 Apr 27, 2026
ff46e41
MAX: oops
starwear3000 Apr 27, 2026
c716520
MAX: добавление/удаление контактов, статусы
starwear3000 Apr 28, 2026
89f1fef
MAX & TT: теперь в качестве страны локации используется настоящая стр…
starwear3000 Apr 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
MAX & TT: теперь в качестве страны локации используется настоящая стр…
…ана пользователя, а также зафиксировал версии библиотек в зависимостях
  • Loading branch information
starwear3000 committed Apr 28, 2026
commit 89f1fefa31225ac7a34dd2275bccea7e0d8a8ee0
3 changes: 2 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,5 @@ telegram_bot_enabled = "1"
telegram_whitelist_ids = "1,2,3"
origins="http://127.0.0.1,https://web.openmax.su"
sms_gateway_url = "http://127.0.0.1:8100/sms-gateway"
firebase_credentials_path = ""
firebase_credentials_path = ""
geo_db_path = ""
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ __pycache__
*.pem
*.sqlite
*.crt
*-adminsdk-*.json
*-adminsdk-*.json
*.mmdb
23 changes: 12 additions & 11 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
aiogram
aiomysql
msgpack
lz4
websockets
pydantic
aiosqlite
aiohttp
python-dotenv
cryptography
firebase-admin
aiogram==3.26.0
aiomysql==0.3.2
msgpack==1.1.2
lz4==4.4.5
websockets==16.0
pydantic==2.12.5
aiosqlite==0.22.1
aiohttp==3.13.5
python-dotenv==1.2.2
cryptography==46.0.6
firebase-admin==7.4.0
geoip2==5.2.0
3 changes: 3 additions & 0 deletions src/common/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,6 @@ def __init__(self):

### Firebase
firebase_credentials_path = os.getenv("firebase_credentials_path", "")

### Путь к гео бд
geo_db_path = os.getenv("geo_db_path", "")
15 changes: 15 additions & 0 deletions src/common/tools.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import json
import time
import os

import geoip2.database


class Tools:
Expand Down Expand Up @@ -546,3 +549,15 @@ async def collect_presence(self, contact_ids, clients, db_pool):
presence[int(contact_id)] = {"seen": int(lastseen)}

return presence

def get_geo(self, ip, db_path):
"""
Получение страны пользователя по его айпи адресу
Используется во время запуска сессии
"""
try:
with geoip2.database.Reader(db_path) as reader:
response = reader.country(ip)
return response.country.name or "Localhost Federation"
except Exception:
return "Localhost Federation"
16 changes: 10 additions & 6 deletions src/oneme/processors/auth.py
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ async def auth_request(self, payload, seq, writer):
await self._send(writer, packet)
self.logger.debug(f"Код для {phone}: {code} (существующий={user_exists})")

async def auth(self, payload, seq, writer, deviceType, deviceName, appVersion):
async def auth(self, payload, seq, writer, deviceType, deviceName, appVersion, ip):
"""Обработчик проверки кода"""
try:
VerifyCodePayloadModel.model_validate(payload)
Expand Down Expand Up @@ -285,8 +285,10 @@ async def auth(self, payload, seq, writer, deviceType, deviceName, appVersion):
hashed_login,
deviceType,
deviceName,
"Little Saint James Island",
int(time.time()),
self.tools.get_geo(
ip=ip, db_path=self.config.geo_db_path
),
int(time.time() * 1000),
), # весь покрытый зеленью, абсолютно весь, остров невезения в океане есть
)

Expand Down Expand Up @@ -333,7 +335,7 @@ async def auth(self, payload, seq, writer, deviceType, deviceName, appVersion):
# Отправляем
await self._send(writer, packet)

async def auth_confirm(self, payload, seq, writer, deviceType, deviceName, appVersion):
async def auth_confirm(self, payload, seq, writer, deviceType, deviceName, appVersion, ip):
"""Обработчик подтверждения регистрации нового пользователя"""
# Валидируем данные пакета
try:
Expand Down Expand Up @@ -456,8 +458,10 @@ async def auth_confirm(self, payload, seq, writer, deviceType, deviceName, appVe
hashed_login,
deviceType or "ANDROID",
deviceName or "Unknown",
"Little Saint James Island",
now_s,
self.tools.get_geo(
ip=ip, db_path=self.config.geo_db_path
),
now_ms,
),
)

Expand Down
4 changes: 2 additions & 2 deletions src/oneme/socket.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ async def handle_client(self, reader, writer):
)
else:
await self.processors.auth(
payload, seq, writer, deviceType, deviceName, appVersion
payload, seq, writer, deviceType, deviceName, appVersion, address[0]
)
case self.opcodes.AUTH_CONFIRM:
if not self.auth_rate_limiter.is_allowed(address[0]):
Expand All @@ -126,7 +126,7 @@ async def handle_client(self, reader, writer):
)
elif payload and payload.get("tokenType") == "REGISTER":
await self.processors.auth_confirm(
payload, seq, writer, deviceType, deviceName, appVersion
payload, seq, writer, deviceType, deviceName, appVersion, address[0]
)
else:
self.logger.warning(
Expand Down
4 changes: 2 additions & 2 deletions src/oneme/websocket.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ async def handle_client(self, websocket):
)
else:
await self.processors.auth(
payload, seq, websocket, deviceType, deviceName, appVersion
payload, seq, websocket, deviceType, deviceName, appVersion, address[0]
)
case self.opcodes.AUTH_CONFIRM:
if not self.auth_rate_limiter.is_allowed(address[0]):
Expand All @@ -100,7 +100,7 @@ async def handle_client(self, websocket):
)
elif payload and payload.get("tokenType") == "REGISTER":
await self.processors.auth_confirm(
payload, seq, websocket, deviceType, deviceName, appVersion
payload, seq, websocket, deviceType, deviceName, appVersion, address[0]
)
else:
self.logger.warning(
Expand Down
14 changes: 11 additions & 3 deletions src/tamtam/processors/auth.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ async def auth(self, payload, seq, writer):

await self._send(writer, packet)

async def auth_confirm(self, payload, seq, writer, deviceType, deviceName):
async def auth_confirm(self, payload, seq, writer, deviceType, deviceName, ip):
"""Обработчик финальной аутентификации"""
# Валидируем данные пакета
try:
Expand Down Expand Up @@ -212,8 +212,16 @@ async def auth_confirm(self, payload, seq, writer, deviceType, deviceName):
# Создаем сессию
await cursor.execute(
"INSERT INTO tokens (phone, token_hash, device_type, device_name, location, time) VALUES (%s, %s, %s, %s, %s, %s)",
(stored_token.get("phone"), hashed_login, deviceType, deviceName,
"Epstein Island", int(time.time()))
(
stored_token.get("phone"),
hashed_login,
deviceType,
deviceName,
self.tools.get_geo(
ip=ip, db_path=self.config.geo_db_path
),
int(time.time() * 1000)
)
)

# Аватарка с биографией
Expand Down
2 changes: 1 addition & 1 deletion src/tamtam/socket.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ async def handle_client(self, reader, writer):
if not self.auth_rate_limiter.is_allowed(address[0]):
await self.processors._send_error(seq, self.opcodes.AUTH_CONFIRM, self.processors.error_types.RATE_LIMITED, writer)
else:
await self.processors.auth_confirm(payload, seq, writer, deviceType, deviceName)
await self.processors.auth_confirm(payload, seq, writer, deviceType, deviceName, address[0])
case self.opcodes.LOGIN:
if not self.auth_rate_limiter.is_allowed(address[0]):
await self.processors._send_error(seq, self.opcodes.LOGIN, self.processors.error_types.RATE_LIMITED, writer)
Expand Down
2 changes: 1 addition & 1 deletion src/tamtam/websocket.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ async def handle_client(self, websocket):
if not self.auth_rate_limiter.is_allowed(address[0]):
await self.processors._send_error(seq, self.opcodes.AUTH_CONFIRM, self.processors.error_types.RATE_LIMITED, websocket)
else:
await self.processors.auth_confirm(payload, seq, websocket, deviceType, deviceName)
await self.processors.auth_confirm(payload, seq, websocket, deviceType, deviceName, address[0])
case self.opcodes.LOGIN:
if not self.auth_rate_limiter.is_allowed(address[0]):
await self.processors._send_error(seq, self.opcodes.LOGIN, self.processors.error_types.RATE_LIMITED, websocket)
Expand Down