mirror of
https://gitee.com/xmz7891/ykxmz.git
synced 2026-10-18 10:10:43 +00:00
被控端 - 修复 MTU 问题:夹 MSS + 路径 MTU 探测(公网可用率 48% -> 100%) - 复用 HTTP 连接(免掉每次新建 TLS 的 30% 握手失败) - 每分钟回头找局域网,自动切回快 400 倍的路径 - 画面心跳帧:静止时省流量,客户端仍知道流是活的 - 锁屏时给出可操作的提示 手表端 - 内置 GTS Root R4 / GlobalSign Root CA,修 SSLHandshakeException - 连接错误翻译成人话(证书/时间/解析/超时分别提示) - 经中转连上后用服务器报的地址刷新已配对记录 - 新增局域网连接页面、服务器延迟检测 服务器端 - 支持 chunked 请求体(修每 16 秒一次的连接错乱与大面积 502) - 网络调优脚本 net-tune.sh(开机自动应用) - 管理页:批量删除、网络体检、下载区 - 隧道改 HTTP/2 + 双连接 文档 - 许可协议 / 安装前必读 / 安装后须知(作者:小麦子)
97 lines
4.0 KiB
Python
97 lines
4.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""重做管理页之后的收尾:
|
|
|
|
1. 补回「退出登录」链接
|
|
我重写页面时把它弄丢了,但 /admin/logout 接口一直都在 ——
|
|
测试里"页面上有退出登录"这条抓住了。
|
|
|
|
2. 更新两条过时的断言
|
|
删除按钮的 class 从 `del` 变成了 `btn del`(配合新样式)。
|
|
测试查的是 `class=del` / `class="del"`,匹配不上。
|
|
改成查 `data-device`(删除按钮必有这个属性)更稳,
|
|
也不会因为以后改 class 名又误报。
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import ast
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
ROOT = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote")
|
|
RELAY = ROOT / "relay" / "relay.py"
|
|
BTN_TEST = ROOT / "_tests" / "test_admin_button.py"
|
|
DEL_TEST = ROOT / "_tests" / "test_admin_delete.py"
|
|
|
|
# ---------------- 1. 退出登录 ----------------
|
|
|
|
META_OLD = ''' <div class=meta>
|
|
<div>版本 <b>{_esc(snap['version'])}</b> · 已运行 <b>{_uptime(snap['uptimeSeconds'])}</b></div>
|
|
<div>本进程内存 <b>{snap['memoryKB'] // 1024} MB</b> · 累计请求 <b>{snap['totalRequests']}</b></div>
|
|
</div>'''
|
|
|
|
META_NEW = ''' <div class=meta>
|
|
<div>版本 <b>{_esc(snap['version'])}</b> · 已运行 <b>{_uptime(snap['uptimeSeconds'])}</b></div>
|
|
<div>本进程内存 <b>{snap['memoryKB'] // 1024} MB</b> · 累计请求 <b>{snap['totalRequests']}</b>
|
|
· <a href="/admin/logout" class=logout>退出登录</a></div>
|
|
</div>'''
|
|
|
|
LOGOUT_CSS_ANCHOR = ''' .meta b{{color:var(--dim);font-weight:500}}'''
|
|
LOGOUT_CSS_NEW = LOGOUT_CSS_ANCHOR + '''
|
|
.meta a.logout{{color:var(--dim);text-decoration:none;
|
|
border-bottom:1px dashed #484f58;transition:.12s}}
|
|
.meta a.logout:hover{{color:var(--accent);border-bottom-color:var(--accent)}}'''
|
|
|
|
# ---------------- 2. 测试断言 ----------------
|
|
|
|
BTN_OLD = ' check("有删除按钮", "button class=del" in html or \'class="del"\' in html)'
|
|
BTN_NEW = (' # 删除按钮的 class 改过(del -> "btn del"),\n'
|
|
' # 用 data-device 判定更稳 —— 删除按钮一定带它。\n'
|
|
' check("有删除按钮", "data-device" in html and "删除" in html)')
|
|
|
|
DEL_OLD = " check(\"有「删除」按钮\", 'class=del' in html or 'class=\"del\"' in html)"
|
|
DEL_NEW = (' # class 名改了(del -> "btn del"),改成按行为判定:\n'
|
|
' # 有带 data-device 的按钮、且文字是"删除"。\n'
|
|
' check("有「删除」按钮",\n'
|
|
' "data-device" in html and "删除" in html,\n'
|
|
' "找不到删除按钮")')
|
|
|
|
|
|
def main() -> int:
|
|
ok = True
|
|
|
|
text = RELAY.read_text(encoding="utf-8")
|
|
if "admin/logout" in text and "a.logout" in text:
|
|
print(" 退出登录链接已在")
|
|
else:
|
|
for old, new, label in ((META_OLD, META_NEW, "退出登录链接"),
|
|
(LOGOUT_CSS_ANCHOR, LOGOUT_CSS_NEW,
|
|
"退出登录样式")):
|
|
if old in text:
|
|
text = text.replace(old, new, 1)
|
|
print(f" 补回 {label}")
|
|
else:
|
|
print(f" [失败] {label} 锚点没找到")
|
|
ok = False
|
|
RELAY.write_text(text, encoding="utf-8", newline="\n")
|
|
|
|
for path, old, new, label in ((BTN_TEST, BTN_OLD, BTN_NEW, "test_admin_button"),
|
|
(DEL_TEST, DEL_OLD, DEL_NEW, "test_admin_delete")):
|
|
content = path.read_text(encoding="utf-8")
|
|
if old in content:
|
|
content = content.replace(old, new, 1)
|
|
path.write_text(content, encoding="utf-8", newline="\n")
|
|
print(f" 更新 {label} 的断言")
|
|
elif "data-device" in content:
|
|
print(f" {label} 已经改过")
|
|
else:
|
|
print(f" [失败] {label} 锚点没找到")
|
|
ok = False
|
|
|
|
ast.parse(RELAY.read_text(encoding="utf-8"))
|
|
print(" relay.py 语法 OK")
|
|
return 0 if ok else 1
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|