im0o
|
7a764f5fe1
|
搭出前端骨架和入站列表
设计基调定为:层次靠底色和一像素描边而不是投影,一屏最多两层容器,间距给足。
tokens.css 顶部写了这三条规则,后面的组件都是它们的推论。
入站列表把两套写法合并成一张表:老式顶层端口字段(mixed-port 这些)和 listeners 数组。
只画 listeners 的话,一台只用 mixed-port 的机器打开会是空板,而那个端口正在跑——
这等于对用户撒谎。合并逻辑在 shared/inbounds.ts,带 10 个测试。
后端顺带能提供打包后的静态文件了,一个进程就能跑起来。
|
2026-08-10 04:10:17 +08:00 |
|
im0o
|
ada547adf7
|
加上 HTTP 接口层和令牌认证
接口分三类:配置读写走保护链路,内核状态和只读透传,静态字段表。
透传用白名单而不是黑名单——写操作属于运行时面板,等做到那步再单独开,
现在不留一个什么都能转发的口子。
令牌即便在只监听本机时也强制校验:同一台机器上跑着容器和别的服务,
「只监听 127.0.0.1」不等于「只有你能访问」。比较用常数时间,避免靠响应耗时猜。
scripts/api-smoke.ts 对着真服务和真内核跑 17 项检查,端到端确认过
改配置之后内核会重载、新端口真的被监听起来。
|
2026-08-10 03:37:49 +08:00 |
|
im0o
|
71b35d5a24
|
从内核源码提取入站类型的字段表
20 种类型、6 个公共字段、398 个专有字段,用来驱动界面表单。
类型清单取自 listener/parse.go 的 ParseListener switch 而不是文件名:
listener/inbound/ 下 24 个非测试文件里有 11 个只是被内嵌的选项组(TLS 伪装、多路复用这类),
不能单独当 type 写;hysteria2-realm 的类型名带中划线而文件名带下划线,靠文件名猜会错。
|
2026-08-10 03:14:56 +08:00 |
|
im0o
|
ac91b96ef8
|
写出配置落盘的保护链路
顺序是:检查基准是否过时 → 自己校验 → 临时文件上跑 mihomo -t → 备份 → 写入 → 重载,
最后两步任一失败就从备份还原并让内核载回原样。
自己校验那一步不能省:实测 v1.19.29,入站的 proxy 指向不存在的出站时 mihomo -t 会通过、
重载会成功,直到有流量走到那个入站才在日志里报错。这类错误只有 Patchbay 查得出来。
路径在读环境变量时就转成绝对路径,因为内核的 PUT /configs 拒绝相对路径。
|
2026-08-10 02:56:04 +08:00 |
|
im0o
|
26bb0f3456
|
把分隔符里的字面 NUL 字节改成转义写法
源码里直接写 NUL 字节会让 git 把整个文件判定成二进制,此后再也看不到这个文件的 diff。
用 \u0000 转义,运行时的值不变。
|
2026-08-10 02:44:50 +08:00 |
|
im0o
|
f7db96fb0e
|
搭起项目骨架,验证配置文件往返
核心是确认「改配置而不弄乱文件」这件事成立:新增一路入站之后,其余 52 行逐字节不变。
搬进来的改写引擎用默认输出参数时会重排整个文件——行尾注释的对齐空格消失、流式数组被加上内边距——
连根本没改动的段落也一起波及。不修的话「改一处只动一处」这个承诺直接落空,所以关掉了它的自动排版,
并在写回之后补了一步逐行还原。
|
2026-08-10 02:43:04 +08:00 |
|