diff --git a/internal/app/app.go b/internal/app/app.go index a0b2704..88174d8 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -94,7 +94,7 @@ func (a *App) Start() error { logrus.Info("Database auto-migration completed.") // 初始化系统设置 - if err := a.settingsManager.EnsureSettingsInitialized(); err != nil { + if err := a.settingsManager.EnsureSettingsInitialized(a.configManager.GetAuthConfig()); err != nil { return fmt.Errorf("failed to initialize system settings: %w", err) } logrus.Info("System settings initialized in DB.") diff --git a/internal/config/system_settings.go b/internal/config/system_settings.go index 7c76760..58aecb7 100644 --- a/internal/config/system_settings.go +++ b/internal/config/system_settings.go @@ -108,7 +108,7 @@ func (sm *SystemSettingsManager) Stop(ctx context.Context) { } // EnsureSettingsInitialized 确保数据库中存在所有系统设置的记录。 -func (sm *SystemSettingsManager) EnsureSettingsInitialized() error { +func (sm *SystemSettingsManager) EnsureSettingsInitialized(authConfig types.AuthConfig) error { defaultSettings := utils.DefaultSystemSettings() metadata := utils.GenerateSettingsMetadata(&defaultSettings) @@ -128,6 +128,11 @@ func (sm *SystemSettingsManager) EnsureSettingsInitialized() error { } value = fmt.Sprintf("http://%s:%s", host, port) } + + if meta.Key == "proxy_keys" { + value = authConfig.Key + } + setting := models.SystemSetting{ SettingKey: meta.Key, SettingValue: value, diff --git a/internal/models/types.go b/internal/models/types.go index 37ec4db..90c156c 100644 --- a/internal/models/types.go +++ b/internal/models/types.go @@ -45,6 +45,7 @@ type Group struct { Name string `gorm:"type:varchar(255);not null;unique" json:"name"` Endpoint string `gorm:"-" json:"endpoint"` DisplayName string `gorm:"type:varchar(255)" json:"display_name"` + ProxyKeys string `gorm:"type:text" json:"proxy_keys"` Description string `gorm:"type:varchar(512)" json:"description"` Upstreams datatypes.JSON `gorm:"type:json;not null" json:"upstreams"` ValidationEndpoint string `gorm:"type:varchar(255)" json:"validation_endpoint"` diff --git a/internal/types/types.go b/internal/types/types.go index 002fb03..b9bd904 100644 --- a/internal/types/types.go +++ b/internal/types/types.go @@ -21,6 +21,7 @@ type SystemSettings struct { AppUrl string `json:"app_url" default:"http://localhost:3001" name:"项目地址" category:"基础参数" desc:"项目的基础 URL,用于拼接分组终端节点地址。系统配置优先于环境变量 APP_URL。"` RequestLogRetentionDays int `json:"request_log_retention_days" default:"7" name:"日志保留时长(天)" category:"基础参数" desc:"请求日志在数据库中的保留天数,0为不清理日志。" validate:"min=0"` RequestLogWriteIntervalMinutes int `json:"request_log_write_interval_minutes" default:"1" name:"日志延迟写入周期(分钟)" category:"基础参数" desc:"请求日志从缓存写入数据库的周期(分钟),0为实时写入数据。" validate:"min=0"` + ProxyKeys string `json:"proxy_keys" name:"全局代理密钥" category:"基础参数" desc:"全局代理密钥,用于访问所有代理端点。多个密钥请用逗号分隔。"` // 请求设置 RequestTimeout int `json:"request_timeout" default:"600" name:"请求超时(秒)" category:"请求设置" desc:"转发请求的完整生命周期超时(秒)等。" validate:"min=1"`