chore: sync local updates
This commit is contained in:
62
mengyaping-backend/storage/kv.go
Normal file
62
mengyaping-backend/storage/kv.go
Normal 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(后续可去掉该环境变量,改用库中令牌)。")
|
||||
}
|
||||
Reference in New Issue
Block a user