From 3dc00bab0d47ee6cd7fe61d699ca2cd6cfef82df Mon Sep 17 00:00:00 2001 From: UnitedAirforce Date: Sat, 29 Nov 2025 11:27:22 +0800 Subject: [PATCH] fixes --- new_server_7003/api/admin.py | 18 +++++++++--------- new_server_7003/api/database.py | 10 +++++----- new_server_7003/api/discord_hook.py | 2 +- new_server_7003/api/email_hook.py | 5 +---- new_server_7003/api/misc.py | 2 +- new_server_7003/db-conv.py | 12 ++++++++++-- 6 files changed, 27 insertions(+), 22 deletions(-) diff --git a/new_server_7003/api/admin.py b/new_server_7003/api/admin.py index aca5fad..c5eaeba 100644 --- a/new_server_7003/api/admin.py +++ b/new_server_7003/api/admin.py @@ -3,7 +3,7 @@ from starlette.routing import Route from starlette.responses import HTMLResponse, JSONResponse, RedirectResponse import sqlalchemy import json -import datetime +from datetime import datetime from api.database import player_database, accounts, results, devices, whitelists, blacklists, batch_tokens, binds, webs, logs, is_admin, read_user_save_file, write_user_save_file from api.misc import crc32_decimal @@ -67,7 +67,7 @@ async def web_admin_get_table(request: Request): # Validate size if size < 10: size = 10 - if size > 100: + elif size > 100: size = 100 table, allowed_fields = TABLE_MAP[table_name] @@ -199,12 +199,12 @@ async def web_admin_table_set(request: Request): # Try to convert to datetime object try: if isinstance(value, str): - dt_obj = datetime.datetime.fromisoformat(value) + dt_obj = datetime.fromisoformat(value) row_data[key] = dt_obj elif isinstance(value, (int, float)): - dt_obj = datetime.datetime.fromtimestamp(value) + dt_obj = datetime.fromtimestamp(value) row_data[key] = dt_obj - elif isinstance(value, datetime.datetime): + elif isinstance(value, datetime): pass # already datetime else: raise ValueError @@ -297,12 +297,12 @@ async def web_admin_table_insert(request: Request): elif expected_type.startswith("DATETIME"): try: if isinstance(value, str): - dt_obj = datetime.datetime.fromisoformat(value) + dt_obj = datetime.fromisoformat(value) row_data[key] = dt_obj elif isinstance(value, (int, float)): - dt_obj = datetime.datetime.fromtimestamp(value) + dt_obj = datetime.fromtimestamp(value) row_data[key] = dt_obj - elif isinstance(value, datetime.datetime): + elif isinstance(value, datetime): pass else: raise ValueError @@ -338,7 +338,7 @@ async def web_admin_data_save(request: Request): save_data = params['data'] crc = crc32_decimal(save_data) - formatted_time = datetime.datetime.now() + formatted_time = datetime.now() query = accounts.update().where(accounts.c.id == uid).values(save_crc=crc, save_timestamp=formatted_time) await player_database.execute(query) diff --git a/new_server_7003/api/database.py b/new_server_7003/api/database.py index 64b0837..97accc5 100644 --- a/new_server_7003/api/database.py +++ b/new_server_7003/api/database.py @@ -226,14 +226,14 @@ async def log_download(user_id, filename, filesize): user_id=user_id, filename=filename, filesize=filesize, - timestamp=datetime.datetime.utcnow() + timestamp=datetime.utcnow() ) await player_database.execute(query) async def get_downloaded_bytes(user_id, hours): query = select(sqlalchemy.func.sum(logs.c.filesize)).where( (logs.c.user_id == user_id) & - (logs.c.timestamp >= datetime.datetime.utcnow() - datetime.timedelta(hours=hours)) + (logs.c.timestamp >= datetime.utcnow() - timedelta(hours=hours)) ) result = await player_database.fetch_one(query) return result[0] if result[0] is not None else 0 @@ -247,7 +247,7 @@ async def verify_user_code(code, user_id): (binds.c.bind_code == code) & (binds.c.user_id == user_id) & (binds.c.is_verified == 0) & - (binds.c.bind_date >= datetime.datetime.utcnow() - datetime.timedelta(minutes=10)) + (binds.c.bind_date >= datetime.utcnow() - timedelta(minutes=10)) ) result = await player_database.fetch_one(query) if not result: @@ -304,14 +304,14 @@ async def user_name_to_user_info(username): async def check_whitelist(decrypted_fields): device_id = decrypted_fields[b'vid'][0].decode() - user_info, device_info = await decrypt_fields_to_user_info(decrypted_fields) + user_info, _ = await decrypt_fields_to_user_info(decrypted_fields) query = select(whitelists.c.device_id).where((whitelists.c.device_id == device_id) | (whitelists.c.device_id == user_info['username'])) result = await player_database.fetch_one(query) return result is not None async def check_blacklist(decrypted_fields): device_id = decrypted_fields[b'vid'][0].decode() - user_info, device_info = await decrypt_fields_to_user_info(decrypted_fields) + user_info, _ = await decrypt_fields_to_user_info(decrypted_fields) query = select(blacklists.c.ban_terms).where((blacklists.c.ban_terms == device_id) | (blacklists.c.ban_terms == user_info['username'])) result = await player_database.fetch_one(query) return result is None diff --git a/new_server_7003/api/discord_hook.py b/new_server_7003/api/discord_hook.py index 63d3791..d066a6a 100644 --- a/new_server_7003/api/discord_hook.py +++ b/new_server_7003/api/discord_hook.py @@ -1,5 +1,5 @@ -from starlette.responses import HTMLResponse, JSONResponse +from starlette.responses import JSONResponse from starlette.requests import Request from starlette.routing import Route from datetime import datetime diff --git a/new_server_7003/api/email_hook.py b/new_server_7003/api/email_hook.py index 2f1411c..9ad94f8 100644 --- a/new_server_7003/api/email_hook.py +++ b/new_server_7003/api/email_hook.py @@ -2,9 +2,6 @@ import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from datetime import datetime -import uuid - -from starlette.responses import JSONResponse from config import SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASSWORD @@ -28,7 +25,7 @@ def init_email(): async def send_email(to_addr, code, lang): global server title = {"en": "Project Taiyo - Email Verification", "zh": "项目 Taiyo - 邮件验证", "tc": "專案 Taiyo - 郵件驗證", "jp": "プロジェクト Taiyo - メール認証"} - with open(f"api/web/email_{lang}.html", "r", encoding="utf-8") as file: + with open(f"web/email_{lang}.html", "r", encoding="utf-8") as file: body = file.read() body = body.format(code=code) diff --git a/new_server_7003/api/misc.py b/new_server_7003/api/misc.py index e634855..67b6afc 100644 --- a/new_server_7003/api/misc.py +++ b/new_server_7003/api/misc.py @@ -252,7 +252,7 @@ async def should_serve(decrypted_fields): should_serve = await check_whitelist(decrypted_fields) and not await check_blacklist(decrypted_fields) if AUTHORIZATION_MODE and should_serve: - user_info, device_info = await decrypt_fields_to_user_info(decrypted_fields, "id") + user_info, _ = await decrypt_fields_to_user_info(decrypted_fields) bind_info = await get_bind(user_info["id"]) if not bind_info or bind_info['is_verified'] != 1: should_serve = False diff --git a/new_server_7003/db-conv.py b/new_server_7003/db-conv.py index f89131e..1ef74aa 100644 --- a/new_server_7003/db-conv.py +++ b/new_server_7003/db-conv.py @@ -366,12 +366,20 @@ async def convert_db(): all_devices = await old_database.fetch_all(select(old_metadata.tables["daily_reward"])) all_devices = [dict(d) for d in all_devices] for device in all_devices: - connected_user = await old_database.fetch_one( + connected_old_user = await old_database.fetch_one( select(old_metadata.tables["user"]).where(old_metadata.tables["user"].c.device_id == device['device_id']) ) + new_user_id = None + old_user_username = connected_old_user['username'] if connected_old_user else None + if old_user_username: + connected_user = await player_database.fetch_one( + select(accounts).where(accounts.c.username == old_user_username) + ) + new_user_id = connected_user['id'] if connected_user else None + insert_query = insert(devices).values( device_id=device['device_id'], - user_id=connected_user['id'] if connected_user else None, + user_id=new_user_id, my_stage=device['my_stage'], my_avatar=device['my_avatar'], item=device['item'],