sutong
|
a5f51a029f
|
refactor: 包名改为 @wishesl/dsh-lan-access
与 GitHub 仓库归属 wishedl 对齐(原 @sutong 不是发布身份,npm 发布会 403)。
同时把包名改为单一来源:scripts/build-client.mjs 与 scripts/test-client.mjs
都从 package.json 读取,避免产物 id 与清单漂移。LICENSE 版权主体同步为 wishesl。
顺带修正 src/panel.js 里「Plugins 内页」的过时注释(面板早已是 Settings 顶层入口)。
|
2026-09-27 04:11:15 +08:00 |
|
sutong
|
fb3389971d
|
fix: 局域网下改用页面内目录选择器
directory-picker-auto 按服务器侧事实选后端:native 要求「仅绑回环 + 非 SSH +
有显示器」。本插件让官方服务器保持回环,于是局域网部署仍被判为 native,点
「添加工作区」会在服务器本机弹原生对话框,远程操作者看不到。
按官方文档锁定 browse 这一对(host-directory-picker-browse +
client-ui-directory-picker-browse),它在页面内列出服务器目录树,可服务远程客户端。
取舍:该 seam 每进程只能挂一个后端,本地页面也会改用页面内浏览;删除 patch 里
最后三行可恢复自适应选择。README 中英双语已补充说明。
|
2026-09-27 03:54:48 +08:00 |
|
sutong
|
ced05e06a3
|
feat: dsh-lan-access — 局域网访问 dsh Web UI
用独立反向代理把 dsh Web UI 发布到局域网。官方 CLI 主动拒绝
`dsh web --host 0.0.0.0`(会把宿主机远程代码执行暴露到网络),
因此本插件让官方服务器保持只绑回环,另开监听并转发。
宿主端(index.js)
- 在 0.0.0.0:3082 监听,把 HTTP 与 WebSocket 转发到 127.0.0.1:<webServer 端口>
- 上游 Host/Origin 重写为回环,使官方 /api 信任围栏「通过」而不是被绕过
- 不改动 Set-Cookie:浏览器按请求 URL 建立 host-only cookie,转发层无需干预
- 监听端 DNS 重绑定防护;targetHost 仅接受回环地址(不会变成开放代理)
- /api/dsh-lan-access/summary 复用官方 connection.admit() 做围栏与浏览器认证
- 启动横幅打印带 launch token 的局域网链接
- 端口被占用时只告警不抛出,并在面板上报 listening:false,不展示不可用的二维码
- ownsHostCompat(默认关):仅为非回环页面声明 ownsHost,恢复官方设置界面
客户端(src/ 经 scripts/build-client.mjs 生成 client.js)
- Settings → 局域网访问:局域网地址列表、复制/打开、选中地址的二维码
- 零依赖二维码编码器(byte 模式 / ECC M / version 1–10)
组合层
- 只 insert 一行,不覆盖任何 shipped row:停用本插件只会移除局域网监听,
回环 Web UI 不受影响
验证
- 宿主转发契约 28/28;客户端契约 25/25
- 二维码编码器与 npm qrcode 参考实现在全版本 × 全 8 掩码下逐模块比对 240/240 一致
- 端到端:局域网 token 首访 303 并铸 cookie → 应用 200;无凭证 401;
WebSocket 升级 101,且与直连回环逐项行为一致
|
2026-09-27 03:49:12 +08:00 |
|