Repository navigation
TinyChat v2.0.161 支持无 Key 上游 / 内网本地模型开关,出站代理补全 SOCKS
[2.0.161]
补上 2.0.160「API Key 可留空」未能真正打通本地 Ollama 的缺口:Key 那关过了,但发请求前的 SSRF 防线仍会挡住本地地址(127.0.0.1、192.168.x.x)与非白名单端口(Ollama 默认 11434)。现在提供后台开关。
新增
- 后台「对话设置 → 允许供应商指向内网 / 本地地址」开关(默认关闭):开启后供应商 Base URL 可指向内网 / 本地地址与任意端口,用于对接本地 Ollama / LM Studio(
http://127.0.0.1:11434)。关闭时行为与之前完全一致 —— 只允许公网地址且端口限 80 / 443 / 8080 / 8443。默认关闭,公网多租户部署无需改动、安全性不受影响。- 开关与出站代理同一手法:值在
tc_with_db里随库带进全局(SSRF 判定在事务之外、发请求前执行),另有环境变量TC_ALLOW_PRIVATE_UPSTREAM=1作为部署级来源(两者任一为真即放行)。 - 演示管理员不可修改该设置(回滚前已可用于探测内网),与 SMTP / 内容安全同一口径拒绝。
- 开启后仍守底线:带
user:pass@的 URL、非http(s)协议、空主机照旧拒绝。
- 开关与出站代理同一手法:值在
测试
tests/private-upstream.php(新增,已接入 CI):默认关闭时本地 / 内网 / 非白名单端口被拒、公网地址照常放行;开启后放行本地与任意端口,但仍拒绝带凭据 URL 与非 http(s) 协议;环境变量来源(子进程验证);设置归一化只认布尔真值、缺省为假。tests/e2e.sh:新增开关默认关闭 / 可开启 / 可回读 / 可关回四项,以及「演示管理员不可改内网访问设置」一项。
文档
- README / 上一版本的更新说明中「对接本地 Ollama」一句此前过度承诺(只去掉 Key 校验,SSRF 防线仍会挡),现已补上「需在后台开启内网放行」的前提。
[2.0.160]
两条来自使用的诉求:接入本地 Ollama / LM Studio 这类不需要 API Key 的上游时,保存供应商被「API Key 不能为空」挡住;以及出站代理想要 SOCKS 与更完整的代理类型支持。
新增
- API Key 可留空(无鉴权上游):新建 / 编辑供应商时不再强制填写 Key。留空即表示上游不需要鉴权,请求不会发送
Authorization/x-api-key头(而不是发一个空的Bearer,后者在部分网关会被判成「带了无效凭据」而拒绝)。适合本地 Ollama、LM Studio、或自建的无鉴权网关;填了 Key 的行为完全不变。注意:这只是去掉保存时的 Key 校验,要让供应商地址真正指向本机还需开启下方 2.0.161 的内网访问开关。 - 出站代理支持完整类型:此前只显式支持
http/https/socks5/socks5h,现在补上socks4与socks4a,并把 scheme 到 curl 代理类型的映射收口到一个函数(tc_curl_apply_proxy),按 scheme 设置CURLOPT_PROXYTYPE(socks4a/socks5h由代理解析域名)。后台「对话设置 → 出站代理」的输入校验与提示文案同步更新。
变更
- 出站代理覆盖面收敛到「全部出站请求」:代理此前只在统一助手
tc_http_request里生效,另有 9 处直接curl_init的旁路(在线更新检查与下载、在线浏览器抓取与子资源预热、搜索结果并行抓页、SearXNG 探测、图片留存下载、图片代理、视频代理)不走代理 —— 表现为「配了代理,但某些功能仍直连、在国内网络卡死」。现在这些路径统一调用同一个tc_curl_apply_proxy,配了代理就全都走代理。 - 获取模型列表 / 测试连通性 / 网页 AI / IM AI 的空 Key 处理:这些路径此前对空 Key 直接拒绝(
请先填写 API Key等),现在允许空 Key 直连(地址仍必填),只在带了掩码占位符••时才清空后按无 Key 处理。生成的图片 / 视频请求同理:空 Key 不再发送Authorization头。
测试
tests/outbound-proxy.php(新增):scheme 到 curl 代理类型的映射(含大小写不敏感、未知 scheme 返回 null、remoteDns标记)、端到端断言实际写入的CURLOPT_PROXY/CURLOPT_PROXYTYPE、非法代理串(ftp/file/javascript:/socks6)被拒、未配置时不写任何代理选项。已接入 CI。tests/e2e.sh:新增「无 Key 供应商可保存」「hasKey 为假」「可正常对话」三项;原先「缺 Key 被拒」的断言改为「缺 Key 直连无鉴权上游成功」。