优化frpc.toml导出逻辑,从前端依赖库改为自建设计

This commit is contained in:
2026-07-23 21:26:08 +08:00
parent 9675420604
commit 892fc98be2
7 changed files with 705 additions and 178 deletions
+50
View File
@@ -5,6 +5,7 @@ import (
"fmt"
"net/http"
"strconv"
"text/template"
"github.com/gin-gonic/gin"
"golang.org/x/crypto/bcrypt"
@@ -56,6 +57,7 @@ func SetupRouter() *gin.Engine {
// 🟢 导入 TOML(新增)
auth.POST("/import/toml", importTomlHandler)
auth.GET("/export/toml", ExportTomlHandler)
}
}
@@ -339,6 +341,54 @@ func importTomlHandler(c *gin.Context) {
})
}
// ExportTomlHandler 导出 TOML 配置文件
func ExportTomlHandler(c *gin.Context) {
cfg, err := GetGlobalConfig()
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"code": 2, "msg": "读取配置失败: " + err.Error()})
return
}
proxies, err := GetProxies()
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"code": 2, "msg": "读取隧道失败: " + err.Error()})
return
}
var activeProxies []Proxy
for _, p := range proxies {
if p.Enabled {
activeProxies = append(activeProxies, p)
}
}
data := struct {
*GlobalConfig
Proxies []Proxy
}{
GlobalConfig: cfg,
Proxies: activeProxies,
}
// 解析模板(直接使用 frp.go 中的 frpcTemplateContent
tmpl, err := template.New("frpc").Parse(FrpcTemplateContent)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"code": 2, "msg": "解析模板失败: " + err.Error()})
return
}
var buf bytes.Buffer
if err := tmpl.Execute(&buf, data); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"code": 2, "msg": "渲染模板失败: " + err.Error()})
return
}
// 返回文件下载
c.Header("Content-Type", "text/plain; charset=utf-8")
c.Header("Content-Disposition", "attachment; filename=frpc.toml")
c.String(http.StatusOK, buf.String())
}
// ========== 辅助函数 ==========
func generateAndReload() error {
if err := GenerateFrpcConfig(); err != nil {