Files
frpc-console/internal/frp/config.go
T

88 lines
1.6 KiB
Go
Raw 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 frp
import (
"bytes"
_ "embed"
"os"
"text/template"
"frpc-console/internal/db"
)
//go:embed frpc.tmpl
var FrpcTemplateContent string
// ConfigData frpc.toml 模板渲染数据
type ConfigData struct {
*db.GlobalConfig
Proxies []db.Proxy
WireProtocolLine string
}
// ConfigData 中已包含 *db.GlobalConfigAdminPort 会自动传递到模板
// 不需要额外修改,但模板 frpc.tmpl 需要支持 admin_port 输出
// 在 frpc.tmpl 中添加:
// {{- if .AdminPort }}
// admin_port = {{ .AdminPort }}
// {{- end }}
// GenerateConfig 生成 frpc.toml 配置文件
func GenerateConfig() error {
cfg, err := db.GetGlobalConfig()
if err != nil {
return err
}
proxies, err := db.GetProxies()
if err != nil {
return err
}
var activeProxies []db.Proxy
for _, p := range proxies {
if p.Enabled {
activeProxies = append(activeProxies, p)
}
}
data := ConfigData{
GlobalConfig: cfg,
Proxies: activeProxies,
}
if cfg.WireProtocolV2 {
data.WireProtocolLine = `wireProtocol = "v2"`
} else {
data.WireProtocolLine = ""
}
var tmplContent string
if _, err := os.Stat("frpc.tmpl"); err == nil {
content, readErr := os.ReadFile("frpc.tmpl")
if readErr == nil {
tmplContent = string(content)
} else {
tmplContent = FrpcTemplateContent
}
} else {
tmplContent = FrpcTemplateContent
}
tmpl, err := template.New("frpc").Parse(tmplContent)
if err != nil {
return err
}
var buf bytes.Buffer
if err := tmpl.Execute(&buf, data); err != nil {
return err
}
if err := os.MkdirAll("./data", 0755); err != nil {
return err
}
return os.WriteFile("./data/frpc.toml", buf.Bytes(), 0644)
}