UNPKG

@lobehub/chat

Version:

Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.

81 lines (69 loc) 2.29 kB
import { NetworkProxySettings } from '@lobechat/electron-client-ipc'; /** * 代理配置验证结果 */ export interface ProxyValidationResult { errors: string[]; isValid: boolean; } /** * 代理配置验证器 */ export class ProxyConfigValidator { private static readonly SUPPORTED_TYPES = ['http', 'https', 'socks5'] as const; private static readonly DEFAULT_BYPASS = 'localhost,127.0.0.1,::1'; /** * 验证代理配置 */ static validate(config: NetworkProxySettings): ProxyValidationResult { const errors: string[] = []; // 如果未启用代理,跳过验证 if (!config.enableProxy) { return { errors: [], isValid: true }; } // 验证代理类型 if (!this.SUPPORTED_TYPES.includes(config.proxyType as any)) { errors.push( `Unsupported proxy type: ${config.proxyType}. Supported types: ${this.SUPPORTED_TYPES.join(', ')}`, ); } // 验证代理服务器 if (!config.proxyServer?.trim()) { errors.push('Proxy server is required when proxy is enabled'); } else if (!this.isValidHost(config.proxyServer)) { errors.push('Invalid proxy server format'); } // 验证代理端口 if (!config.proxyPort?.trim()) { errors.push('Proxy port is required when proxy is enabled'); } else { const port = parseInt(config.proxyPort, 10); if (isNaN(port) || port < 1 || port > 65_535) { errors.push('Proxy port must be a valid number between 1 and 65535'); } } // 验证认证信息 if (config.proxyRequireAuth) { if (!config.proxyUsername?.trim()) { errors.push('Proxy username is required when authentication is enabled'); } if (!config.proxyPassword?.trim()) { errors.push('Proxy password is required when authentication is enabled'); } } return { errors, isValid: errors.length === 0, }; } /** * 验证主机名格式 */ private static isValidHost(host: string): boolean { // 简单的主机名验证(IP 地址或域名) const ipRegex = /^(\d{1,3}\.){3}\d{1,3}$/; const domainRegex = /^[\dA-Za-z]([\dA-Za-z-]*[\dA-Za-z])?(\.[\dA-Za-z]([\dA-Za-z-]*[\dA-Za-z])?)*$/; return ipRegex.test(host) || domainRegex.test(host); } }