mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-25 22:42: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} 是否允许
|
* @returns {boolean} 是否允许
|
||||||
*/
|
*/
|
||||||
function isPathAllowedForClient(clientId, path) {
|
function isPathAllowedForClient(clientId, path) {
|
||||||
const definition = Object.values(CLIENT_DEFINITIONS).find((d) => d.id === clientId)
|
const definition = getClientDefinitionById(clientId)
|
||||||
if (!definition) {
|
if (!definition) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,8 +5,9 @@
|
|||||||
|
|
||||||
const logger = require('../utils/logger')
|
const logger = require('../utils/logger')
|
||||||
const {
|
const {
|
||||||
CLIENT_DEFINITIONS,
|
CLIENT_IDS,
|
||||||
getAllClientDefinitions,
|
getAllClientDefinitions,
|
||||||
|
getClientDefinitionById,
|
||||||
isPathAllowedForClient
|
isPathAllowedForClient
|
||||||
} = require('./clientDefinitions')
|
} = require('./clientDefinitions')
|
||||||
const ClaudeCodeValidator = require('./clients/claudeCodeValidator')
|
const ClaudeCodeValidator = require('./clients/claudeCodeValidator')
|
||||||
@@ -14,6 +15,14 @@ const GeminiCliValidator = require('./clients/geminiCliValidator')
|
|||||||
const CodexCliValidator = require('./clients/codexCliValidator')
|
const CodexCliValidator = require('./clients/codexCliValidator')
|
||||||
const DroidCliValidator = require('./clients/droidCliValidator')
|
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} 验证器实例
|
* @returns {Object|null} 验证器实例
|
||||||
*/
|
*/
|
||||||
static getValidator(clientId) {
|
static getValidator(clientId) {
|
||||||
switch (clientId) {
|
const validator = VALIDATOR_MAP[clientId]
|
||||||
case 'claude_code':
|
if (!validator) {
|
||||||
return ClaudeCodeValidator
|
logger.warn(`Unknown client ID: ${clientId}`)
|
||||||
case 'gemini_cli':
|
return null
|
||||||
return GeminiCliValidator
|
|
||||||
case 'codex_cli':
|
|
||||||
return CodexCliValidator
|
|
||||||
case 'droid_cli':
|
|
||||||
return DroidCliValidator
|
|
||||||
default:
|
|
||||||
logger.warn(`Unknown client ID: ${clientId}`)
|
|
||||||
return null
|
|
||||||
}
|
}
|
||||||
|
return validator
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -44,7 +46,7 @@ class ClientValidator {
|
|||||||
* @returns {Array<string>} 客户端ID列表
|
* @returns {Array<string>} 客户端ID列表
|
||||||
*/
|
*/
|
||||||
static getSupportedClients() {
|
static getSupportedClients() {
|
||||||
return ['claude_code', 'gemini_cli', 'codex_cli', 'droid_cli']
|
return Object.keys(VALIDATOR_MAP)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -115,7 +117,7 @@ class ClientValidator {
|
|||||||
allowed: true,
|
allowed: true,
|
||||||
matchedClient: clientId,
|
matchedClient: clientId,
|
||||||
clientName: validator.getName(),
|
clientName: validator.getName(),
|
||||||
clientInfo: Object.values(CLIENT_DEFINITIONS).find((def) => def.id === clientId)
|
clientInfo: getClientDefinitionById(clientId)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user