chore: sync local updates

This commit is contained in:
2026-05-16 19:03:32 +08:00
parent 360a5f15b9
commit aff88ba97d
47 changed files with 3651 additions and 12175 deletions

View File

@@ -0,0 +1,62 @@
package storage
import (
"errors"
"log"
"os"
"strings"
)
var errEmptyAdminToken = errors.New("admin_token 不能为空")
// EffectiveAdminToken 管理员令牌:环境变量 ADMIN_TOKEN 优先,否则读 MySQL monitor_kv
func (s *Storage) EffectiveAdminToken() string {
if v := strings.TrimSpace(os.Getenv("ADMIN_TOKEN")); v != "" {
return v
}
return strings.TrimSpace(s.adminTokenFromDB())
}
func (s *Storage) adminTokenFromDB() string {
var row MonitorKV
if err := s.db.Where("cfg_key = ?", kvKeyAdminToken).Limit(1).Find(&row).Error; err != nil {
return ""
}
if row.CfgKey == "" {
return ""
}
return row.CfgValue
}
// SetAdminToken 更新数据库中的管理员令牌(需已能通过 AdminAuth
func (s *Storage) SetAdminToken(token string) error {
token = strings.TrimSpace(token)
if token == "" {
return errEmptyAdminToken
}
var row MonitorKV
s.db.Where("cfg_key = ?", kvKeyAdminToken).Limit(1).Find(&row)
if row.CfgKey == "" {
return s.db.Create(&MonitorKV{CfgKey: kvKeyAdminToken, CfgValue: token}).Error
}
row.CfgValue = token
return s.db.Save(&row).Error
}
func (s *Storage) seedAdminTokenKV() {
var n int64
s.db.Model(&MonitorKV{}).Where("cfg_key = ?", kvKeyAdminToken).Count(&n)
if n > 0 {
return
}
val := strings.TrimSpace(os.Getenv("ADMIN_TOKEN"))
if val == "" {
log.Println("提示: 数据库 monitor_kv 中尚无 admin_token。可设置环境变量 ADMIN_TOKEN 后重启以自动写入,或对 monitor_kv 执行 INSERT。")
return
}
if err := s.db.Create(&MonitorKV{CfgKey: kvKeyAdminToken, CfgValue: val}).Error; err != nil {
log.Printf("写入初始 admin_token 失败: %v", err)
return
}
log.Println("已从环境变量 ADMIN_TOKEN 写入数据库 monitor_kv后续可去掉该环境变量改用库中令牌。")
}