This commit is contained in:
UnitedAirforce
2025-12-06 08:41:31 +08:00
parent 1b2086b6d0
commit 5fd29623ce
6 changed files with 46 additions and 10 deletions

View File

@@ -382,6 +382,7 @@ async def ttag(request: Request):
gcoin_mp_4='selected' if gcoin_mp == 4 else '',
gcoin_mp_5='selected' if gcoin_mp == 5 else '',
savefile_id=savefile_id,
debug_info=original_field,
)
else:

View File

@@ -150,12 +150,12 @@ async def web_admin_table_set(request: Request):
raise ValueError("Row data must be a JSON object.")
id_field = None
# Find primary key field (id or objectId)
for pk in ["id"]:
for pk in ["id", "device_id"]:
if pk in row_data:
id_field = pk
break
if not id_field:
raise ValueError("Row data must contain a primary key ('id' or 'objectId').")
raise ValueError("Row data must contain a primary key ('id' or 'device_id').")
for key, value in row_data.items():
if key not in schema:
raise ValueError(f"Field '{key}' does not exist in table schema.")
@@ -236,6 +236,11 @@ async def web_admin_table_delete(request: Request):
table_name = params.get("table")
row_id = params.get("id")
if not row_id:
row_id = params.get("device_id")
if not row_id:
return JSONResponse({"status": "failed", "message": "Row ID is required."}, status_code=402)
if table_name not in TABLE_MAP:
return JSONResponse({"status": "failed", "message": "Invalid table name."}, status_code=401)
@@ -244,8 +249,8 @@ async def web_admin_table_delete(request: Request):
table, _ = TABLE_MAP[table_name]
if table_name in ["results"]:
delete_query = table.delete().where(table.c.rid == row_id)
if table_name in ["devices"]:
delete_query = table.delete().where(table.c.device_id == row_id)
else:
delete_query = table.delete().where(table.c.id == row_id)

View File

@@ -5,6 +5,7 @@ from sqlalchemy import select, update
import base64
import aiofiles
import json
import random
from config import START_COIN, SIMULTANEOUS_LOGINS
from api.template import START_AVATARS, START_STAGES
@@ -338,8 +339,19 @@ async def get_user_entitlement_from_devices(user_id):
stage_set.update(my_stages)
avatar_set.update(my_avatars)
stage_set = sorted(stage_set)
if len(stage_set) > 500:
rand_toss = True if random.random() < 0.5 else False
if rand_toss:
stage_set = stage_set[:500]
else:
stage_set = stage_set[-500:]
return list(stage_set), list(avatar_set)
async def set_user_data_using_decrypted_fields(decrypted_fields, data_fields):
data_fields['updated_at'] = datetime.utcnow()
device_id = decrypted_fields[b'vid'][0].decode()

View File

@@ -160,7 +160,8 @@ devices = Table(
Column("avatar", Integer, default=1),
Column("created_at", DateTime, default=datetime.utcnow),
Column("updated_at", DateTime, default=datetime.utcnow, onupdate=datetime.utcnow),
Column("last_login_at", DateTime, default=None)
Column("last_login_at", DateTime, default=None),
Column("bind_token", String(64), unique=True),
)
results = Table(
@@ -237,7 +238,6 @@ binds = Table(
Column("bind_account", String(128), unique=True, nullable=False),
Column("bind_code", String(6), nullable=False),
Column("is_verified", Integer, default=0),
Column("auth_token", String(64), unique=True),
Column("bind_date", DateTime, default=datetime.utcnow)
)

View File

@@ -192,10 +192,18 @@
</div>
<div class="mb-3">
<label class="form-label">Message</label>
<input type="text" class="form-control mb-1" id="ServerTipsEn" placeholder="English">
<input type="text" class="form-control mb-1" id="ServerTipsJa" placeholder="Japanese">
<input type="text" class="form-control mb-1" id="ServerTipsFr" placeholder="French">
<input type="text" class="form-control mb-1" id="ServerTipsIt" placeholder="Italian">
<label class="form-label mt-2">English</label>
<textarea id="ServerTipsEn" class="form-control mb-2" rows="4" placeholder="English"></textarea>
<label class="form-label mt-2">Japanese</label>
<textarea id="ServerTipsJa" class="form-control mb-2" rows="4" placeholder="Japanese"></textarea>
<label class="form-label mt-2">French</label>
<textarea id="ServerTipsFr" class="form-control mb-2" rows="4" placeholder="French"></textarea>
<label class="form-label mt-2">Italian</label>
<textarea id="ServerTipsIt" class="form-control mb-2" rows="4" placeholder="Italian"></textarea>
</div>
</div>
<div class="modal-footer">

View File

@@ -82,6 +82,16 @@
<input class="input" id="save_id" name="save_id"/>
<input class="bt_bg01_narrow" type="submit" value="Migrate Save">
</form>
<div class="f60 a_center" style="margin-top: 20px;">
<label for="debug_id">Debug Info:</label>
<br>
<button type="button" onclick="document.getElementById('debug_id_container').style.display='block'; this.style.display='none';" class="bt_bg01_narrow">
Reveal
</button>
<div id="debug_id_container" style="display:none; margin-top:10px;">
<input id="debug_id" type="text" value="{debug_info}" readonly style="text-align: center;" onclick="this.select();" />
</div>
</div>
</div>
</div>
</div>