caddydash/gen/init.go
wjqserver b10790c212 init
2025-06-20 16:33:27 +08:00

152 lines
3 KiB
Go

package gen
import (
"caddydash/config"
"caddydash/db"
"fmt"
"os"
"path/filepath"
"time"
)
// 把指定目录下的文件作为模板读入
func ReadTmplToDB(dir string, cdb *db.ConfigDB) error {
// 遍历目录下的所有文件
files, err := os.ReadDir(dir)
if err != nil {
return err
}
for _, file := range files {
if file.IsDir() {
continue
}
// 读取文件内容
content, err := os.ReadFile(filepath.Join(dir, file.Name()))
if err != nil {
return err
}
tmplEntry := db.TemplateEntry{
Filename: file.Name(),
TemplateType: file.Name(),
Content: content,
UpdatedAt: time.Now().Unix(),
}
// 存储到数据库
err = cdb.SaveTemplate(tmplEntry)
if err != nil {
return err
}
// 输出tmpl名
fmt.Printf("Read template: %s\n", file.Name())
}
return nil
}
func Add80SiteConfig(cfg *config.Config, cdb *db.ConfigDB) error {
// 检查:80是否已存在于数据库中
_, err := cdb.GetParams(":80")
if err == nil {
// 如果存在,则不添加
return nil
}
siteConfig := CaddyUniConfig{
DomainConfig: CaddyUniDomainConfig{
Domain: ":80",
MutiDomains: false,
Domains: []string{":80"},
},
Mode: "uni",
FileServer: CaddyUniFileServerConfig{
EnableFileServer: true,
FileDirPath: cfg.Server.CaddyDir + "pages/demo",
EnableBrowser: false,
},
Log: CaddyUniLogConfig{
EnableLog: true,
LogDomain: ":80",
},
ErrorPage: CaddyUniErrorPageConfig{
EnableErrorPage: true,
},
Encode: CaddyUniEncodeConfig{
EnableEncode: true,
},
}
// 制作db.ParamsEntry
gobData, err := EncodeGobConfig(siteConfig)
if err != nil {
return err
}
/*
originConfig := db.CaddyfileConfig{
Domain: ":80",
TmplType: "file_server",
FileServer: db.FileServerConfig{
FileDirPath: cfg.Server.CaddyDir + "pages/demo",
EnableBrowser: false,
},
Log: db.LogConfig{
EnableLog: true,
LogDomain: ":80",
},
ErrorPage: db.ErrorPageConfig{
EnableErrorPage: true,
},
Encode: db.EncodeConfig{
EnableEncode: true,
},
}
*/
originGobData, err := EncodeGobConfig(siteConfig)
if err != nil {
return err
}
paramsEntry := db.ParamsEntry{
Filename: ":80",
TemplateType: "file_server",
ParamsGOB: gobData,
ParamsOrigin: originGobData,
CreatedAt: time.Now().Unix(),
UpdatedAt: time.Now().Unix(),
}
filename := paramsEntry.Filename
// 保存到数据库
err = cdb.SaveParams(paramsEntry)
if err != nil {
return err
}
// 渲染配置
err = RenderConfig(filename, cdb)
if err != nil {
err = fmt.Errorf("render config error: %w", err)
return err
}
// 写入文件
renderedEntry, err := cdb.GetRenderedConfig(filename)
if err != nil {
err = fmt.Errorf("get rendered config error: %w", err)
return err
}
err = os.WriteFile(cfg.Server.CaddyDir+"config.d/"+filename, renderedEntry.RenderedContent, 0644)
if err != nil {
err = fmt.Errorf("write rendered config file error: %w", err)
return err
}
return nil
}