caddydash/api/global.go
2025-06-30 15:31:14 +08:00

87 lines
2 KiB
Go

package api
import (
"caddydash/config"
"caddydash/db"
"caddydash/gen"
"os"
"github.com/infinite-iroha/touka"
)
func PutGlobalConfig(cdb *db.ConfigDB, cfg *config.Config) touka.HandlerFunc {
return func(c *touka.Context) {
var config gen.CaddyGlobalConfig
err := c.ShouldBindJSON(&config)
if err != nil {
c.JSON(400, touka.H{"error": err.Error()})
return
}
var paramsGob []byte
paramsGob, err = gen.EncodeGobConfig(config)
if err != nil {
c.Warnf("encode gob config error: %v", err)
c.JSON(500, touka.H{"error": err.Error()})
return
}
// 取出数据库内的tmpl
tmplContent, err := cdb.GetGlobalTemplate("caddyfile")
if err != nil {
c.Warnf("get global template error: %v", err)
c.JSON(500, touka.H{"error": err.Error()})
return
}
renderedContent, err := gen.RenderGlobalConfig(paramsGob, tmplContent)
if err != nil {
c.Warnf("render global config error: %v", err)
c.JSON(500, touka.H{"error": err.Error()})
return
}
//回写条目到数据库
err = cdb.SaveGlobalConfig(db.GlobalConfig{
Filename: "caddyfile",
Params: paramsGob,
TmplContent: tmplContent,
RenderedContent: renderedContent,
})
if err != nil {
c.Warnf("save global config error: %v", err)
c.JSON(500, touka.H{"error": err.Error()})
return
}
err = os.WriteFile(cfg.Server.CaddyDir+"Caddyfile", renderedContent, 0644)
if err != nil {
c.Warnf("write Caddyfile error: %v", err)
c.JSON(500, touka.H{"error": err.Error()})
return
}
c.JSON(200, touka.H{"message": "global config saved"})
return
}
}
// GetGlobalConfig 检出已有配置
func GetGlobalConfig(cdb *db.ConfigDB) touka.HandlerFunc {
return func(c *touka.Context) {
globalConfig, err := cdb.GetGlobalConfig("caddyfile")
if err != nil {
c.JSON(500, touka.H{"error": err.Error()})
return
}
var config gen.CaddyGlobalConfig
err = gen.DecodeGobConfig(globalConfig.Params, &config)
if err != nil {
c.JSON(500, touka.H{"error": err.Error()})
return
}
c.JSON(200, config)
}
}