shanshanzhong 1d81df6664
Some checks failed
Build docker and publish / build (20.15.1) (push) Has been cancelled
add:添加短链接服务
2026-01-24 00:32:08 -08:00

125 lines
3.6 KiB
Go
Raw Permalink 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 main
import (
"encoding/json"
"fmt"
"os"
"gopkg.in/yaml.v3"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
// 配置结构
type AppConfig struct {
MySQL struct {
Addr string `yaml:"Addr"`
Dbname string `yaml:"Dbname"`
Username string `yaml:"Username"`
Password string `yaml:"Password"`
Config string `yaml:"Config"`
} `yaml:"MySQL"`
}
type System struct {
Key string `gorm:"column:key;primaryKey"`
Value string `gorm:"column:value"`
}
func main() {
fmt.Println("====== 更新 CustomData ======")
// 1. 读取配置
cfgData, err := os.ReadFile("configs/ppanel.yaml")
if err != nil {
fmt.Printf("读取配置失败: %v\n", err)
return
}
var cfg AppConfig
if err := yaml.Unmarshal(cfgData, &cfg); err != nil {
fmt.Printf("解析配置失败: %v\n", err)
return
}
// 2. 连接数据库
dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?%s",
cfg.MySQL.Username, cfg.MySQL.Password, cfg.MySQL.Addr, cfg.MySQL.Dbname, cfg.MySQL.Config)
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Printf("数据库连接失败: %v\n", err)
return
}
fmt.Println("✅ 数据库连接成功")
// 3. 查找 SiteConfig (在 system 表中key 通常是 'SiteConfig')
// 注意system 表结构可能由 key, value 组成
// 我们需要查找包含 CustomData 的那个配置
// 先尝试直接查找 SiteConfig
var sysConfig System
// 根据之前的查看SiteConfig 可能不是直接存 JSON而是字段。
// 但用户之前 curl 看到的是 custom_data 字段。
// 让我们查找包含 "shareUrl" 的记录来定位
err = db.Table("system").Where("value LIKE ?", "%shareUrl%").First(&sysConfig).Error
if err != nil {
fmt.Printf("未找到包含 shareUrl 的配置: %v\n", err)
// 尝试列出所有 key
var keys []string
db.Table("system").Pluck("key", &keys)
fmt.Printf("现有 Keys: %v\n", keys)
return
}
fmt.Printf("找到配置 Key: %s\n", sysConfig.Key)
fmt.Printf("原始内容: %s\n", sysConfig.Value)
// 4. 解析并修改
// System Value 可能是 SiteConfig 的 JSON或者 CustomData 只是其中一个字段
// 假设 Value 是 SiteConfig 结构体的 JSON
var siteConfigMap map[string]interface{}
if err := json.Unmarshal([]byte(sysConfig.Value), &siteConfigMap); err != nil {
fmt.Printf("解析 Config Value 失败: %v\n", err)
return
}
// 检查是否有 CustomData
if customDataStr, ok := siteConfigMap["CustomData"].(string); ok {
fmt.Println("找到 CustomData 字段,正在更新...")
var customDataMap map[string]interface{}
if err := json.Unmarshal([]byte(customDataStr), &customDataMap); err != nil {
fmt.Printf("解析 CustomData 失败: %v\n", err)
return
}
// 添加 domain
customDataMap["domain"] = "getsapp.net"
// 重新序列化 CustomData
newCustomDataBytes, _ := json.Marshal(customDataMap)
siteConfigMap["CustomData"] = string(newCustomDataBytes)
fmt.Printf("新的 CustomData: %s\n", string(newCustomDataBytes))
} else {
// 也许 Value 本身就是 CustomData? (不太可能,根据之前的 grep 结果)
// 或者 Key 是 'custom_data'?
fmt.Println("未在配置中找到 CustomData 字段,尝试直接解析为 CustomData...")
// 尝试直接添加 domain 看是否合理
siteConfigMap["domain"] = "getsapp.net"
}
// 5. 保存回数据库
newConfigBytes, _ := json.Marshal(siteConfigMap)
// fmt.Printf("更新后的配置 Value: %s\n", string(newConfigBytes))
err = db.Table("system").Where("`key` = ?", sysConfig.Key).Update("value", string(newConfigBytes)).Error
if err != nil {
fmt.Printf("更新数据库失败: %v\n", err)
return
}
fmt.Println("✅ 数据库更新成功!")
}