Files
mengyaping/mengyaping-backend/storage/kv.go
2026-05-16 19:03:32 +08:00

63 lines
1.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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后续可去掉该环境变量改用库中令牌。")
}