3 Commits
Author SHA1 Message Date
liuzhuohua d2f4caee9c 新增电光蓝/藏青色主题预设,中文化网络异常提示,新增 API 对齐检查器
1. 主题(backend/theme.py)
   - make_palette 新增 deep 参数:深色主题可指定独立底色,
     解决多个 dark 主题共用 #111827 底色、换主色后观感雷同的问题
   - 深色分支的四档状态浅底改用「提亮 + 向各自状态色偏」双通道派生,
     修掉 ok_l / err_l 撞成同色(navy 上四档不可区分)的问题
   - 新增 2 个内置预设:electric-blue(电光蓝,浅色,高饱和青蓝)、
     navy(藏青色,深色,deep=#0d1526,夜间低眩光)。内置主题 6 → 8
   - 对比度实测全部 ≥ WCAG AA:电光蓝最低 4.67,藏青最低 4.70

2. 中文化(web/app.js)
   - 新增 netErrCn():把浏览器原生英文异常(Failed to fetch /
     NetworkError / 证书错误 / 权限拒绝 / 解析失败等)归类为 8 种
     可读中文原因,原始串仅保留在 detail 供排查
   - api() 的网络失败与 JSON 解析失败分支改为中文主提示
   - 替换 7 处 e.message 直出(下载×3、文件读取、加载、初始化、导出)
   - 页面渲染 .catch 统一为中文主提示 + 小字技术细节

3. 测试
   - 新增 _dev/t-api106.py:API 五维对齐检查
     (前端路径→后端路由 / 方法语义 / 查询参数名 / PAGE_MODULES 落点 /
      后端未被调用路由),5 项全通过,前端 88 个静态路径全部可路由
   - t-theme.py:内置主题数断言改为非空(避免加主题误红),
     新增四档状态浅底互不相同 + 两个新预设共 30 项断言,831 项全绿
2026-10-02 22:31:16 +08:00
liuzhuohua cd5ef7411f fix: 清「假输入框 / 隐身字段」这批前后端缺陷,版本号 1.0.4
把全量代码(后端 9 模块 + 前端单文件 SPA,约 4.5 万行)过了一遍,用 AST 抽出
渲染器读取的每个配置键,与页面上输入框绑定的字段做双向差集,专门找两类问题:
前端发了后端从不读(假输入框)、后端读了前端没有入口(隐身字段)。

会写坏系统的:
- render_network 违反 render() 契约返回字典,调用方按二元组解包后把字典的键
  当成路径和内容 —— 迁移 networkd 会生成文件名叫 name、内容写着 content 的垃圾文件
- DMZ 规则方向写反:注释写「排除到本机自身」,条件写成反面,管理口流量也一并 DNAT

五个「填了等于没填」的输入框:
- WAN 的 MTU 与「是否接受上游 DNS」后端零消费,现真正写入 MTUBytes= / UseDNS=
- DHCPv6 的「子网 ID」绑的是不存在的键,真生效字段是 sla_id
- Samba WINS 要求一个从不回填的字段同时为真,勾了永不生效
- 网桥「启用 STP」未绑定事件,勾完保存不进去
- 主题设计器「按主色生成配色」按钮无 handler

其余:
- RA 页补齐 rdnss_life / dnssl_life 输入框(1.0.3 修了错位却没给入口)
- 迁移预览只发 lan,必报「WAN 网卡不能为空」且网桥从不出现 → 补发 wan + bridge
- dnsmasq / miniupnpd / ppp / dhcpcd IPv6 / RA 地址池 / NFS 等插值零校验
- chrony 服务器校验只认域名和 IPv4,IPv6 NTP 服务器被误拒
- v_int 改用 try/except:上标数字能通过 isdigit() 却让 int() 抛异常导致 500
- ensure_cert 删掉硬编码的开发机 IP,改为本机地址 + 默认路由推导;补 openssl 失败检测
- DDNS 面板 XSS(记录名/服务商未转义);主题 CSS 注释注入(前后端各一处)

测试:render 返回值契约断言、CSS 注释注入回归、模板孤儿控件守卫,
_dev/t-*.py 42/42、前端三查 + md 链接检查全绿。
2026-10-02 00:23:30 +08:00
liuzhuohua 64df3cf331 feat: Drouter 1.0.0 —— Debian 13 软路由管理系统
一套跑在 Debian 13 (trixie) 上的软路由管理系统,提供 43 个功能页面的
Web 管理面板:WAN 接入、PPPoE 多拨、DHCP/DNS、IPv6、防火墙、QoS 限速、
访问控制、DDNS、文件共享、Docker 管理等。

核心设计原则:不重新实现任何协议
  PPPoE 交给 ppp,DHCP 交给 dnsmasq,IPv6 RA 交给 radvd,NAT 交给 nftables。
  Web 面板只做三件事:渲染原生配置文件 → 语法预检 → 原子写入并 reload。
  面板删掉后,系统仍是一台配置完好的 Debian 路由器。

安全默认值
  · 安装后不接管网络:不改默认路由、不开 IP 转发、不启动 DHCP 服务
  · 所有改网络的动作都需要用户在面板上亲手点「应用」
  · 避开 5900 端口,不触碰 VNC / X 会话
  · 配置写入前先做语法预检,失败则回滚

架构
  · backend/  Python 3 标准库,零第三方依赖(9 个模块)
  · web/      原生 JS/CSS,无构建步骤
  · 常驻 helper 通过 Unix socket 提供 75 个动作,socket 不可用时回退 subprocess
  · 鉴权走 X-Token 请求头

打包
  · packaging/build-deb.sh            → drouter_1.0.0_all.deb(含 6 个 systemd 单元)
  · scripts/make-offline-deps.sh      → 236 个依赖 .deb + 本地仓库索引
  · packaging/build-offline-bundle.sh → 自包含离线包,目标机零外网可装
  · packaging/build-docker.sh         → 容器镜像(体验用)

测试
  40 套单元测试 + 3 个前端检查脚本(菜单映射 / 离线渲染 / 手机适配),
  全部挂在 devtools/sync.sh 的预检链里。

许可:MIT
2026-09-30 19:26:24 +08:00