PicoBot/web/src/components/Settings/SettingsModal.tsx
oudecheng fa420b713f feat(gateway): 添加 HTTP API 认证与 CORS 防护,修复密钥泄露风险
- 新增 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 配置入口
2026-08-05 22:41:00 +08:00

32 lines
1.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 网关连接设置的 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;
}