Documentation
¶
Overview ¶
Package unlock 保存与读取节点的「流媒体 / AI 解锁」探测结果。
结果由节点上的探针产生并上报,服务端只负责存最近一次的快照。之所以必须由探针 来测:解锁取决于发起请求的那个 IP,服务端在别的机房,只能测到它自己。
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ErrNotVisible = errors.New("unlock report is not readable for this caller")
ErrNotVisible 表示调用者无权读取该 uuid 的解锁快照:客户端表里没有这个 uuid, 或者它对应的节点是 hidden 而调用者不是管理员。
Functions ¶
func ClientHistoryReadable ¶ added in v1.6.9
ClientHistoryReadable 判断某个 uuid 的节点数据是否可以返回给这个调用者。
规则与 web/rpc/jsonrpc 的 clientHistoryReadable 逐字相同,两个要点:
- **存在性是答案的一部分。** 客户端表里没有这个 uuid 时一律不可读,否则已删除 节点留存下来的数据会被当成「存在且可见」而返回;
- hidden 节点只对已登录管理员可读。
这里重新实现而不是共享同一个函数,是因为 jsonrpc 那份是包内私有的;公开的解锁 读取路径必须先过同一道门,两处必须同进同退。
func LoadVisible ¶ added in v1.6.9
func LoadVisible(uuid string, loggedIn bool) (*v2.UnlockParams, error)
LoadVisible 读取 uuid 的解锁快照,并先做可见性判断。
这是公开读取路径唯一允许使用的入口:load 不再导出,调用者必须显式给出 loggedIn, 否则就会重现 P1-5 —— 匿名的 /api/public/ip-info/v1/lookup?uuid=… 按 uuid 拿到任意 节点探针上报的出口地址(egress_ip)。
返回 (nil, nil) 的两种情况是既有契约的一部分:uuid 为空(没有节点上下文,第三方主题 的按地址查询就是这么调用的),以及数据库未就绪(无库时也没有任何解锁数据可泄露, 而解锁只是附加信息,不该让整个 IP 信息接口失败)。
uuid 存在但不可见时返回 ErrNotVisible,调用方必须把它渲染成与「不存在」完全相同的 错误 —— 两者可区分时,这个接口就成了隐藏节点存在性的判定器。
func SaveContext ¶ added in v1.7.0
Types ¶
This section is empty.