feat: complete Kra admin backend migration
This commit is contained in:
@@ -15,7 +15,7 @@ import (
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
func registerSystemConfigRoutes(group *gin.RouterGroup, config *conf.AdminBackend, systemService *service.SystemService, settings *service.SettingsService) {
|
||||
func registerSystemConfigRoutes(group *gin.RouterGroup, config *conf.AdminBackend, systemService *service.SystemService, settings *service.SettingsService, scheduler *TaskScheduler) {
|
||||
security := group.Group("/securityConfig")
|
||||
security.GET("/getSecurityConfig", func(c *gin.Context) {
|
||||
value, err := settings.Security(c.Request.Context())
|
||||
@@ -54,6 +54,9 @@ func registerSystemConfigRoutes(group *gin.RouterGroup, config *conf.AdminBacken
|
||||
if config.Local != nil {
|
||||
admin["local"] = gin.H{"storePath": config.Local.StorePath, "pathPrefix": config.Local.PathPrefix}
|
||||
}
|
||||
if config.Media != nil {
|
||||
admin["media"] = gin.H{"sessionTtl": config.Media.SessionTtl}
|
||||
}
|
||||
if config.Email != nil {
|
||||
email = gin.H{"to": config.Email.To, "from": config.Email.From, "host": config.Email.Host, "secret": "******", "nickname": config.Email.Nickname, "port": config.Email.Port, "is-ssl": config.Email.IsSsl, "is-loginauth": config.Email.IsLoginAuth}
|
||||
}
|
||||
@@ -78,6 +81,9 @@ func registerSystemConfigRoutes(group *gin.RouterGroup, config *conf.AdminBacken
|
||||
StorePath string `json:"storePath"`
|
||||
PathPrefix string `json:"pathPrefix"`
|
||||
} `json:"local"`
|
||||
Media struct {
|
||||
SessionTTL int32 `json:"sessionTtl"`
|
||||
} `json:"media"`
|
||||
Storage *conf.AdminBackend_Storage `json:"storage"`
|
||||
} `json:"admin"`
|
||||
Email *struct {
|
||||
@@ -97,48 +103,60 @@ func registerSystemConfigRoutes(group *gin.RouterGroup, config *conf.AdminBacken
|
||||
return
|
||||
}
|
||||
if config != nil {
|
||||
config.RouterPrefix = req.Config.Admin.RouterPrefix
|
||||
if config.Jwt != nil {
|
||||
next := proto.Clone(config).(*conf.AdminBackend)
|
||||
next.RouterPrefix = req.Config.Admin.RouterPrefix
|
||||
if next.Jwt != nil {
|
||||
if req.Config.Admin.JWT.SigningKey != "" && req.Config.Admin.JWT.SigningKey != "******" {
|
||||
config.Jwt.SigningKey = req.Config.Admin.JWT.SigningKey
|
||||
next.Jwt.SigningKey = req.Config.Admin.JWT.SigningKey
|
||||
}
|
||||
if req.Config.Admin.JWT.Issuer != "" {
|
||||
config.Jwt.Issuer = req.Config.Admin.JWT.Issuer
|
||||
next.Jwt.Issuer = req.Config.Admin.JWT.Issuer
|
||||
}
|
||||
}
|
||||
if config.Local != nil {
|
||||
if next.Local != nil {
|
||||
if req.Config.Admin.Local.StorePath != "" {
|
||||
config.Local.StorePath = req.Config.Admin.Local.StorePath
|
||||
next.Local.StorePath = req.Config.Admin.Local.StorePath
|
||||
}
|
||||
if req.Config.Admin.Local.PathPrefix != "" {
|
||||
config.Local.PathPrefix = req.Config.Admin.Local.PathPrefix
|
||||
next.Local.PathPrefix = req.Config.Admin.Local.PathPrefix
|
||||
}
|
||||
}
|
||||
if next.Media != nil && req.Config.Admin.Media.SessionTTL > 0 {
|
||||
next.Media.SessionTtl = req.Config.Admin.Media.SessionTTL
|
||||
}
|
||||
if req.Config.Admin.Storage != nil {
|
||||
preserveStorageSecrets(req.Config.Admin.Storage, config.Storage)
|
||||
config.Storage = req.Config.Admin.Storage
|
||||
preserveStorageSecrets(req.Config.Admin.Storage, next.Storage)
|
||||
next.Storage = req.Config.Admin.Storage
|
||||
}
|
||||
if config.Email != nil && req.Config.Email != nil {
|
||||
config.Email.To = req.Config.Email.To
|
||||
config.Email.From = req.Config.Email.From
|
||||
config.Email.Host = req.Config.Email.Host
|
||||
config.Email.Nickname = req.Config.Email.Nickname
|
||||
config.Email.Port = req.Config.Email.Port
|
||||
config.Email.IsSsl = req.Config.Email.IsSSL
|
||||
config.Email.IsLoginAuth = req.Config.Email.IsLoginAuth
|
||||
if next.Email != nil && req.Config.Email != nil {
|
||||
next.Email.To = req.Config.Email.To
|
||||
next.Email.From = req.Config.Email.From
|
||||
next.Email.Host = req.Config.Email.Host
|
||||
next.Email.Nickname = req.Config.Email.Nickname
|
||||
next.Email.Port = req.Config.Email.Port
|
||||
next.Email.IsSsl = req.Config.Email.IsSSL
|
||||
next.Email.IsLoginAuth = req.Config.Email.IsLoginAuth
|
||||
if req.Config.Email.Secret != "" && req.Config.Email.Secret != "******" {
|
||||
config.Email.Secret = req.Config.Email.Secret
|
||||
next.Email.Secret = req.Config.Email.Secret
|
||||
}
|
||||
}
|
||||
if err := systemService.PersistAdminConfig(c.Request.Context(), next); err != nil {
|
||||
fail(c, "配置保存失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
}
|
||||
if err := systemService.PersistConfig(c.Request.Context()); err != nil {
|
||||
fail(c, "配置保存失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
writeResult(c, codeSuccess, gin.H{"restartRequired": true}, "配置已保存,重启服务后完整生效")
|
||||
writeResult(c, codeSuccess, gin.H{}, "设置成功")
|
||||
})
|
||||
system.POST("/reloadSystem", func(c *gin.Context) {
|
||||
writeResult(c, codeSuccess, gin.H{"reload": false, "restartRequired": true}, "配置已在当前进程部分生效;路由与存储配置需重启服务")
|
||||
if err := systemService.ReloadConfig(c.Request.Context()); err != nil {
|
||||
fail(c, "重载系统失败:"+err.Error())
|
||||
return
|
||||
}
|
||||
if err := scheduler.Reload(c.Request.Context()); err != nil {
|
||||
fail(c, "系统配置已重载,但定时任务重载失败:"+err.Error())
|
||||
return
|
||||
}
|
||||
writeResult(c, codeSuccess, gin.H{}, "重载系统成功")
|
||||
})
|
||||
system.POST("/getServerInfo", func(c *gin.Context) {
|
||||
cpuPercent, _ := cpu.Percent(200*time.Millisecond, false)
|
||||
|
||||
Reference in New Issue
Block a user