[feat] 设计一个分享网络配置的 URL Schema
- Dominant language
- Rust
- Stars
- 13.6k
- Forks
- 1.4k
- Avg merge
- 1d 9h
- Merged PRs (30d)
- 34
Description
### 功能类别 / Feature Category
用户界面 / User Interface
### 使用场景 / Use Case
通过统一的 URL Schema ,为客户端(CLI、Android、Windows、Linux等)快速导入/创建网络配置,从而大大提高简化网络配置步骤,方便使用。
### 当前限制 / Current Limitations
我拥有多个不同型号、不同端侧的设备。
每次创建网络或更改配置,都需要在不同的设备中手动输入配置,特别繁琐。
### 建议的解决方案 / Proposed Solution
注册一个 URL Schema ,这个 URL Schema 承载网络配置,并可以通过命令行参数、粘贴导入、扫码导入等方式导入其他客户端。
具体说明如下:
## URL Schema
URL Schema 可以设置为:`easytier://`
支持以下 URL :
- 导入配置: `easytier://config-import?data={encoded-config}`
- `data` :网络配置数据
## 网络配置数据
使用 base64 编码、 gzip 压缩 toml 配置字符串,得到简短的编码后字符串。
具效果可参考 [https://www.zickty.com/texttogzip](https://www.zickty.com/texttogzip)
## 示例
编码前:
```
dhcp = true
listeners = [
"tcp://0.0.0.0:11010",
"udp://0.0.0.0:11010",
"wg://0.0.0.0:11011",
]
rpc_portal = "0.0.0.0:0"
[network_identity]
network_name = "name"
network_secret = "secret"
[[peer]]
uri = "tcp://1.1.1.1:11010"
[[peer]]
uri = "tcp://1.1.1.2:11010"
[flags]
latency_first = true
```
编码后:
```
H4sIAAAAAAAAA32QwQqDMAyG73kK6Xlou6OwJ5EipUZX1nUljYhvv1bnBoMtOST8308SMlxtrC4V04zgXWIMSCkLHVQ5BNvYNo2st2yVkkqK047m4Sdapi+iMtFA0fbxQWx8XiAOLgVAF5CXB916N2Bgx6uGQwnmjsVeqnirCS0hF33vyowuIpLWMJMrYD9d1Vu+7vvvOn9cozdT0uBNfohd+9FR4uNNT1uitI4zAQAA
```
组装成 URL:
```
easytier://config-import?data=H4sIAAAAAAAAA32QwQqDMAyG73kK6Xlou6OwJ5EipUZX1nUljYhvv1bnBoMtOST8308SMlxtrC4V04zgXWIMSCkLHVQ5BNvYNo2st2yVkkqK047m4Sdapi+iMtFA0fbxQWx8XiAOLgVAF5CXB916N2Bgx6uGQwnmjsVeqnirCS0hF33vyowuIpLWMJMrYD9d1Vu+7vvvOn9cozdT0uBNfohd+9FR4uNNT1uitI4zAQAA
```
二维码预览:

## 导入流程
### 桌面端 GUI
- 在工具栏左侧添加一个按钮,按钮名称为“导入配置”
- 点击“导入配置”按钮后,弹出对话框
- 在对话框中粘贴配置 URL 并导入
### 移动端 GUI
- 在工具栏左侧添加一个按钮,按钮名称为“导入配置”
- 点击“导入配置”按钮后,弹出对话框
- 移动端支持粘贴导入和扫码导入,选择相应的导入流程并执行
### CLI
- 添加功能 `--config-url-decode url` ,这个功能能够解码 url ,并在命令行中输出解码后的 toml 配置信息
- 使用如 `./easytier-core --config-url-decode url >config.toml` 这样的命令保存配置信息为文件,即可直接使用
### 预期收益 / Expected Benefits
- 降低新用户学习成本
- 极大简化分享网络配置的流程
### 技术考虑 / Technical Considerations
- GUI 版本可以直接在前端实现此功能,无需修改 rust 端
- CLI 版本需要加入 gzip 解压库
### 备选方案 / Alternative Solutions
_No response_
### 实现优先级 / Implementation Priority
低优先级;可以由我实现
### 补充信息 / Additional Context
- clash 等相关应用均支持通过 url 导入,灵感由此而来。
Contributor guide
Assessment
This issue has not been assessed yet.