mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-24 23:02:30 +00:00
refactor(validators): 消除重复代码,使用映射表和复用函数
代码审查后的重构: - isPathAllowedForClient 复用 getClientDefinitionById 避免重复查找 - validateRequest 中使用 getClientDefinitionById 替代内联查找 - 使用 VALIDATOR_MAP 映射表替代 switch 语句 - getSupportedClients 改为从映射表动态获取,避免硬编码 - 导入 CLIENT_IDS 枚举,提高类型安全性 这些改动提高了代码的可维护性,添加新客户端时只需修改映射表。
This commit is contained in:
@@ -97,7 +97,7 @@ function isValidClientId(clientId) {
|
||||
* @returns {boolean} 是否允许
|
||||
*/
|
||||
function isPathAllowedForClient(clientId, path) {
|
||||
const definition = Object.values(CLIENT_DEFINITIONS).find((d) => d.id === clientId)
|
||||
const definition = getClientDefinitionById(clientId)
|
||||
if (!definition) {
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -5,8 +5,9 @@
|
||||
|
||||
const logger = require('../utils/logger')
|
||||
const {
|
||||
CLIENT_DEFINITIONS,
|
||||
CLIENT_IDS,
|
||||
getAllClientDefinitions,
|
||||
getClientDefinitionById,
|
||||
isPathAllowedForClient
|
||||
} = require('./clientDefinitions')
|
||||
const ClaudeCodeValidator = require('./clients/claudeCodeValidator')
|
||||
@@ -14,6 +15,14 @@ const GeminiCliValidator = require('./clients/geminiCliValidator')
|
||||
const CodexCliValidator = require('./clients/codexCliValidator')
|
||||
const DroidCliValidator = require('./clients/droidCliValidator')
|
||||
|
||||
// 客户端ID到验证器的映射表
|
||||
const VALIDATOR_MAP = {
|
||||
[CLIENT_IDS.CLAUDE_CODE]: ClaudeCodeValidator,
|
||||
[CLIENT_IDS.GEMINI_CLI]: GeminiCliValidator,
|
||||
[CLIENT_IDS.CODEX_CLI]: CodexCliValidator,
|
||||
[CLIENT_IDS.DROID_CLI]: DroidCliValidator
|
||||
}
|
||||
|
||||
/**
|
||||
* 客户端验证器类
|
||||
*/
|
||||
@@ -24,19 +33,12 @@ class ClientValidator {
|
||||
* @returns {Object|null} 验证器实例
|
||||
*/
|
||||
static getValidator(clientId) {
|
||||
switch (clientId) {
|
||||
case 'claude_code':
|
||||
return ClaudeCodeValidator
|
||||
case 'gemini_cli':
|
||||
return GeminiCliValidator
|
||||
case 'codex_cli':
|
||||
return CodexCliValidator
|
||||
case 'droid_cli':
|
||||
return DroidCliValidator
|
||||
default:
|
||||
logger.warn(`Unknown client ID: ${clientId}`)
|
||||
return null
|
||||
const validator = VALIDATOR_MAP[clientId]
|
||||
if (!validator) {
|
||||
logger.warn(`Unknown client ID: ${clientId}`)
|
||||
return null
|
||||
}
|
||||
return validator
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -44,7 +46,7 @@ class ClientValidator {
|
||||
* @returns {Array<string>} 客户端ID列表
|
||||
*/
|
||||
static getSupportedClients() {
|
||||
return ['claude_code', 'gemini_cli', 'codex_cli', 'droid_cli']
|
||||
return Object.keys(VALIDATOR_MAP)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -115,7 +117,7 @@ class ClientValidator {
|
||||
allowed: true,
|
||||
matchedClient: clientId,
|
||||
clientName: validator.getName(),
|
||||
clientInfo: Object.values(CLIENT_DEFINITIONS).find((def) => def.id === clientId)
|
||||
clientInfo: getClientDefinitionById(clientId)
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
|
||||
Reference in New Issue
Block a user