87 lines
2 KiB
Go
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)
|
|
}
|
|
}
|