Merge branch 'main' into main

This commit is contained in:
Vladislav Lisitsyn
2024-12-14 02:02:00 +03:00
committed by GitHub
4 changed files with 92 additions and 29 deletions
+24 -11
View File
@@ -8,6 +8,9 @@ from config import DATABASE_URL, TRANSITION_DATE_STR
from database import get_servers_from_db
from logger import logger
import urllib.parse
from config import PROJECT_NAME, NEWS_MESSAGE
async def fetch_url_content(url, tg_id):
@@ -75,10 +78,12 @@ async def handle_old_subscription(request):
conn = await asyncpg.connect(DATABASE_URL)
try:
key_info = await conn.fetchrow(
"SELECT created_at FROM keys WHERE email = $1", email
)
if not key_info:
logger.warning(f"Клиент с email {email} не найден в базе.")
return web.Response(
@@ -87,7 +92,8 @@ async def handle_old_subscription(request):
)
created_at_ms = key_info["created_at"]
logger.info(f"Значение created_at для клиента с email {email}: {created_at_ms}")
cluster_name = key_info["cluster_name"]
logger.info(f"Значение created_at для клиента с email {email}: {created_at_ms}, кластер: {cluster_name}")
created_at_datetime = datetime.utcfromtimestamp(created_at_ms / 1000)
logger.info(
@@ -102,12 +108,13 @@ async def handle_old_subscription(request):
)
servers = await get_servers_from_db()
cluster_servers = servers.get(cluster_name, [])
logger.info(f"Сервера в кластере: {cluster_servers}")
urls = []
for cluster_name, cluster_servers in servers.items():
for server in cluster_servers:
server_subscription_url = f"{server['subscription_url']}/{email}"
urls.append(server_subscription_url)
for server in cluster_servers:
server_subscription_url = f"{server['subscription_url']}/{email}"
urls.append(server_subscription_url)
combined_subscriptions = await combine_unique_lines(urls, email, "")
@@ -115,11 +122,12 @@ async def handle_old_subscription(request):
"\n".join(combined_subscriptions).encode("utf-8")
).decode("utf-8")
encoded_project_name = urllib.parse.quote(f"{PROJECT_NAME}\n{NEWS_MESSAGE}")
headers = {
"Content-Type": "text/plain; charset=utf-8",
"Content-Disposition": "inline",
"profile-update-interval": "7",
"profile-title": email,
"profile-title": encoded_project_name,
}
logger.info(f"Возвращаем объединенные подписки для email: {email}")
@@ -144,10 +152,12 @@ async def handle_new_subscription(request):
conn = await asyncpg.connect(DATABASE_URL)
try:
client_data = await conn.fetchrow(
"SELECT tg_id FROM keys WHERE email = $1", email
)
if not client_data:
logger.warning(f"Клиент с email {email} не найден в базе.")
return web.Response(
@@ -156,6 +166,7 @@ async def handle_new_subscription(request):
)
stored_tg_id = client_data["tg_id"]
cluster_name = client_data["server_id"]
if str(tg_id) != str(stored_tg_id):
logger.warning(f"Неверный tg_id для клиента с email {email}.")
@@ -163,16 +174,17 @@ async def handle_new_subscription(request):
text="❌ Неверные данные. Получите свой ключ в боте.",
status=403,
)
finally:
await conn.close()
servers = await get_servers_from_db()
cluster_servers = servers.get(cluster_name, [])
urls = []
for cluster_name, cluster_servers in servers.items():
for server in cluster_servers:
server_subscription_url = f"{server['subscription_url']}/{email}"
urls.append(server_subscription_url)
for server in cluster_servers:
server_subscription_url = f"{server['subscription_url']}/{email}"
urls.append(server_subscription_url)
query_string = request.query_string
logger.info(f"Извлечен query string: {query_string}")
@@ -183,11 +195,12 @@ async def handle_new_subscription(request):
"\n".join(combined_subscriptions).encode("utf-8")
).decode("utf-8")
encoded_project_name = urllib.parse.quote(f"{PROJECT_NAME}\n{NEWS_MESSAGE}")
headers = {
"Content-Type": "text/plain; charset=utf-8",
"Content-Disposition": "inline",
"profile-update-interval": "7",
"profile-title": email,
"profile-title": encoded_project_name,
}
logger.info(f"Возвращаем объединенные подписки для email: {email}")