feat: 密钥管理

This commit is contained in:
tbphp
2025-07-04 21:19:15 +08:00
parent 7c10474d19
commit 01b86f7e30
23 changed files with 1427 additions and 250 deletions

View File

@@ -276,3 +276,16 @@ func getEnvOrDefault(key, defaultValue string) string {
}
return defaultValue
}
// GetInt is a helper function for SystemSettingsManager to get an integer value with a default.
func (s *SystemSettingsManager) GetInt(key string, defaultValue int) int {
s.mu.RLock()
defer s.mu.RUnlock()
if valStr, ok := s.settingsCache[key]; ok {
if valInt, err := strconv.Atoi(valStr); err == nil {
return valInt
}
}
return defaultValue
}

View File

@@ -34,6 +34,11 @@ type SystemSettings struct {
// 请求日志配置(数据库日志)
RequestLogRetentionDays int `json:"request_log_retention_days" default:"30" name:"日志保留天数" category:"日志配置" desc:"请求日志在数据库中的保留天数" validate:"min=1"`
// 密钥验证配置
KeyValidationIntervalMinutes int `json:"key_validation_interval_minutes" default:"60" name:"定时验证周期" category:"密钥验证" desc:"后台定时验证密钥的默认周期(分钟)" validate:"min=5"`
KeyValidationConcurrency int `json:"key_validation_concurrency" default:"10" name:"验证并发数" category:"密钥验证" desc:"执行密钥验证时的并发 goroutine 数量" validate:"min=1,max=100"`
KeyValidationTaskTimeoutMinutes int `json:"key_validation_task_timeout_minutes" default:"60" name:"手动验证超时" category:"密钥验证" desc:"手动触发的全量验证任务的超时时间(分钟)" validate:"min=10"`
}
// GenerateSettingsMetadata 使用反射从 SystemSettings 结构体动态生成元数据
@@ -105,8 +110,9 @@ func DefaultSystemSettings() SystemSettings {
// SystemSettingsManager 管理系统配置
type SystemSettingsManager struct {
settings SystemSettings
mu sync.RWMutex
settings SystemSettings
settingsCache map[string]string // Cache for raw string values
mu sync.RWMutex
}
var globalSystemSettings *SystemSettingsManager
@@ -169,6 +175,8 @@ func (sm *SystemSettingsManager) LoadFromDatabase() error {
sm.mu.Lock()
defer sm.mu.Unlock()
sm.settingsCache = settingsMap
// 使用默认值,然后用数据库中的值覆盖
sm.settings = DefaultSystemSettings()
sm.mapToStruct(settingsMap, &sm.settings)
@@ -334,6 +342,8 @@ func (sm *SystemSettingsManager) DisplayCurrentSettings() {
logrus.Infof(" Request timeouts: request=%ds, response=%ds, idle_conn=%ds",
sm.settings.RequestTimeout, sm.settings.ResponseTimeout, sm.settings.IdleConnTimeout)
logrus.Infof(" Request log retention: %d days", sm.settings.RequestLogRetentionDays)
logrus.Infof(" Key validation: interval=%dmin, concurrency=%d, task_timeout=%dmin",
sm.settings.KeyValidationIntervalMinutes, sm.settings.KeyValidationConcurrency, sm.settings.KeyValidationTaskTimeoutMinutes)
}
// 辅助方法