feat: 维护页 Tailscale 管理(设备列表/改名/授权/密钥不过期/设置IP/auth key,独立模块 core/tailscale_client.py)+ 密钥迁移 .env(STF_TOKEN/WEB_SECRET_KEY/TAILSCALE_API_KEY 不再入库)+ 修复设备更新端点(/device/{id} 405,改用 /name /authorized /key 专属端点)+ auth key description 仅 ASCII
This commit is contained in:
+72
@@ -667,3 +667,75 @@ adb 远程终端:用平台 adb 二进制执行任意 adb 命令(20s 超时
|
||||
```
|
||||
`result`:`命中` / `未找到` / `已执行`(无选择器命中语义的步骤)。
|
||||
无"设备控制"权限返回 403。
|
||||
|
||||
---
|
||||
|
||||
## 15. Tailscale 管理(仅管理员)
|
||||
|
||||
维护页"Tailscale 管理"分区,调用 Tailscale 官方 API v2。所有接口仅管理员可用。
|
||||
前置:`.env` 配置 `TAILSCALE_API_KEY`(Settings → API Access Tokens)与
|
||||
`TAILSCALE_TAILNET`(tailnet 名,个人账号一般为邮箱前缀);未配置返回 502 并附提示。
|
||||
设备 IP 由 tailnet 分配,API 不可修改,列表只读展示。
|
||||
|
||||
### GET /api/tailscale/status
|
||||
|
||||
配置状态检查。
|
||||
|
||||
**响应**:
|
||||
```json
|
||||
{"ok": true, "configured": false, "hint": "TAILSCALE_API_KEY(...);TAILSCALE_TAILNET(...)"}
|
||||
```
|
||||
|
||||
### GET /api/tailscale/devices
|
||||
|
||||
列出 tailnet 全部设备。
|
||||
|
||||
**响应**:
|
||||
```json
|
||||
{"ok": true, "devices": [
|
||||
{"id": "d1", "name": "dev-a", "hostname": "dev-a", "os": "linux",
|
||||
"addresses": ["100.100.10.11"], "authorized": true,
|
||||
"key_expiry_disabled": false, "online": true, "last_seen": "...", "tags": []}
|
||||
]}
|
||||
```
|
||||
|
||||
### POST /api/tailscale/devices/:device_id
|
||||
|
||||
更新设备(按传入字段分发到 Tailscale 专属端点,`POST /device/{id}` 本身是 405):
|
||||
`name` → `/name` 显示名;`authorized` → `/authorized` 授权开关;
|
||||
`key_expiry_disabled` → `/key`(true=密钥永不过期,即关闭设备密钥验证,恢复后按原定过期时间执行)。
|
||||
|
||||
**请求**(JSON):
|
||||
```json
|
||||
{"key_expiry_disabled": true}
|
||||
```
|
||||
|
||||
### POST /api/tailscale/devices/:device_id/ip
|
||||
|
||||
设置设备的 Tailscale IPv4 地址(未公开端点,实测可用)。
|
||||
|
||||
**请求**(JSON):
|
||||
```json
|
||||
{"ipv4": "100.100.10.16"}
|
||||
```
|
||||
|
||||
⚠ 改 IP 会断开设备当前 tailscale 会话;平台设备池 serial 随之变化,需同步更新 STF 设备池/分组/任务目标。
|
||||
|
||||
### DELETE /api/tailscale/devices/:device_id
|
||||
|
||||
从 tailnet 移除设备(下次上线需重新授权)。
|
||||
|
||||
### POST /api/tailscale/authkey
|
||||
|
||||
生成设备接入 auth key(key 只返回一次)。
|
||||
|
||||
**请求**(JSON):
|
||||
```json
|
||||
{"description": "新设备接入", "reusable": false, "ephemeral": false,
|
||||
"preauthorized": true, "expiry_seconds": 3600}
|
||||
```
|
||||
|
||||
**响应**:
|
||||
```json
|
||||
{"ok": true, "key": "tskey-auth-...", "id": "k1", "expires": "2026-08-11T01:00:00Z"}
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user