- 新增 auth_token 配置项:非 loopback 绑定强制认证,loopback 可选加固 - 新增 auth.rs:loopback 判定(IpAddr 解析)、常量时间 token 比较、RFC 6750 Bearer 解析 - 新增 Bearer token 中间件(/api/*)与 WebSocket ?token= 校验 - 新增 CORS layer:loopback 镜像 Origin 防 DNS rebinding,非 loopback permissive - 修复 .gitignore 遗漏 tests/test.env,补充通用 *.env 规则 - 修复前端 experts/skills/subagents.ts 直接 fetch 不带 token(13 处),统一走 authedFetch - config.json host 从 0.0.0.0 改回 127.0.0.1 - mask_config/save_config 处理 auth_token 掩码与保留 - ConnectionTab/GatewayTab 增加认证 token 配置入口
32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
// 网关连接设置的 localStorage 工具函数
|
||
// 原 SettingsModal 组件已删除(功能由 ConfigPage 的 Connection Tab 承担),
|
||
// 仅保留 App.tsx 使用的 getGatewaySettings / buildWsUrl / GatewaySettings 工具函数
|
||
|
||
import { getAuthToken } from '../../api/client';
|
||
|
||
export interface GatewaySettings {
|
||
host: string;
|
||
port: number;
|
||
}
|
||
|
||
const DEFAULT_HOST = '127.0.0.1';
|
||
const DEFAULT_PORT = 19876;
|
||
|
||
export function getGatewaySettings(): GatewaySettings {
|
||
try {
|
||
const host = localStorage.getItem('picobot-gateway-host') || DEFAULT_HOST;
|
||
const portStr = localStorage.getItem('picobot-gateway-port');
|
||
const port = portStr ? parseInt(portStr, 10) : DEFAULT_PORT;
|
||
return { host, port: isNaN(port) ? DEFAULT_PORT : port };
|
||
} catch {
|
||
return { host: DEFAULT_HOST, port: DEFAULT_PORT };
|
||
}
|
||
}
|
||
|
||
export function buildWsUrl(settings: GatewaySettings): string {
|
||
const base = `ws://${settings.host}:${settings.port}/ws`;
|
||
// 远程访问时需要携带认证 token(浏览器原生 WebSocket 不支持自定义 header)
|
||
const token = getAuthToken();
|
||
return token ? `${base}?token=${encodeURIComponent(token)}` : base;
|
||
}
|