feat(sora): 新增 Sora 平台支持并修复高危安全和性能问题
新增功能: - 新增 Sora 账号管理和 OAuth 认证 - 新增 Sora 视频/图片生成 API 网关 - 新增 Sora 任务调度和缓存机制 - 新增 Sora 使用统计和计费支持 - 前端增加 Sora 平台配置界面 安全修复(代码审核): - [SEC-001] 限制媒体下载响应体大小(图片 20MB、视频 200MB),防止 DoS 攻击 - [SEC-002] 限制 SDK API 响应大小(1MB),防止内存耗尽 - [SEC-003] 修复 SSRF 风险,添加 URL 验证并强制使用代理配置 BUG 修复(代码审核): - [BUG-001] 修复 for 循环内 defer 累积导致的资源泄漏 - [BUG-002] 修复图片并发槽位获取失败时已持有锁未释放的永久泄漏 性能优化(代码审核): - [PERF-001] 添加 Sentinel Token 缓存(3 分钟有效期),减少 PoW 计算开销 技术细节: - 使用 io.LimitReader 限制所有外部输入的大小 - 添加 urlvalidator 验证防止 SSRF 攻击 - 使用 sync.Map 实现线程安全的包级缓存 - 优化并发槽位管理,添加 releaseAll 模式防止泄漏 影响范围: - 后端:新增 Sora 相关数据模型、服务、网关和管理接口 - 前端:新增 Sora 平台配置、账号管理和监控界面 - 配置:新增 Sora 相关配置项和环境变量 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -941,6 +941,7 @@ export default {
|
||||
anthropic: 'Anthropic',
|
||||
openai: 'OpenAI',
|
||||
gemini: 'Gemini',
|
||||
sora: 'Sora',
|
||||
antigravity: 'Antigravity'
|
||||
},
|
||||
saving: '保存中...',
|
||||
@@ -1199,6 +1200,7 @@ export default {
|
||||
openai: 'OpenAI',
|
||||
anthropic: 'Anthropic',
|
||||
gemini: 'Gemini',
|
||||
sora: 'Sora',
|
||||
antigravity: 'Antigravity'
|
||||
},
|
||||
types: {
|
||||
@@ -1382,6 +1384,11 @@ export default {
|
||||
baseUrlHint: '留空使用官方 OpenAI API',
|
||||
apiKeyHint: '您的 OpenAI API Key'
|
||||
},
|
||||
// Sora specific hints
|
||||
sora: {
|
||||
baseUrlHint: '留空使用全局 Sora Base URL',
|
||||
apiKeyHint: '您的 Sora access token'
|
||||
},
|
||||
modelRestriction: '模型限制(可选)',
|
||||
modelWhitelist: '模型白名单',
|
||||
modelMapping: '模型映射',
|
||||
@@ -2936,6 +2943,47 @@ export default {
|
||||
defaultConcurrency: '默认并发数',
|
||||
defaultConcurrencyHint: '新用户的最大并发请求数'
|
||||
},
|
||||
sora: {
|
||||
title: 'Sora 设置',
|
||||
description: '配置 Sora 上游请求、缓存与去水印策略',
|
||||
baseUrl: 'Sora Base URL',
|
||||
baseUrlPlaceholder: 'https://sora.chatgpt.com/backend',
|
||||
baseUrlHint: 'Sora 后端 API 基础地址',
|
||||
callLogicMode: '调用模式',
|
||||
callLogicModeDefault: '默认',
|
||||
callLogicModeNative: '原生',
|
||||
callLogicModeProxy: '代理',
|
||||
callLogicModeHint: '默认保持当前策略',
|
||||
timeout: '请求超时(秒)',
|
||||
timeoutHint: '单次任务超时控制',
|
||||
maxRetries: '最大重试次数',
|
||||
maxRetriesHint: '上游请求失败时的重试次数',
|
||||
pollInterval: '轮询间隔(秒)',
|
||||
pollIntervalHint: '任务状态轮询间隔',
|
||||
cacheEnabled: '启用缓存',
|
||||
cacheEnabledHint: '启用生成结果缓存并提供本地下载',
|
||||
cacheBaseDir: '缓存根目录',
|
||||
cacheVideoDir: '视频缓存目录',
|
||||
cacheMaxBytes: '缓存容量(字节)',
|
||||
cacheMaxBytesHint: '0 表示不限制',
|
||||
cacheUserDirEnabled: '按用户隔离缓存目录',
|
||||
cacheUserDirEnabledHint: '开启后按用户创建子目录',
|
||||
cacheAllowedHosts: '缓存下载白名单',
|
||||
cacheAllowedHostsPlaceholder: '每行一个域名,例如: oscdn2.dyysy.com',
|
||||
cacheAllowedHostsHint: '为空时回退全局 URL 白名单',
|
||||
watermarkFreeEnabled: '启用去水印',
|
||||
watermarkFreeEnabledHint: '尝试通过解析服务获取无水印视频',
|
||||
watermarkFreeParseMethod: '解析方式',
|
||||
watermarkFreeParseMethodThirdParty: '第三方解析',
|
||||
watermarkFreeParseMethodCustom: '自定义解析',
|
||||
watermarkFreeParseMethodHint: '选择去水印解析方式',
|
||||
watermarkFreeCustomParseUrl: '自定义解析地址',
|
||||
watermarkFreeCustomParseToken: '自定义解析 Token',
|
||||
watermarkFreeFallback: '解析失败降级',
|
||||
watermarkFreeFallbackHint: '失败时返回原视频',
|
||||
tokenRefreshEnabled: '启用 Token 刷新',
|
||||
tokenRefreshEnabledHint: '定时刷新 Sora Token(需配置调度)'
|
||||
},
|
||||
site: {
|
||||
title: '站点设置',
|
||||
description: '自定义站点品牌',
|
||||
|
||||
Reference in New Issue
Block a user