wireguard-dashboard/script/conf_script.go
2024-08-12 16:52:28 +08:00

82 lines
2.1 KiB
Go

package script
import (
"github.com/spf13/cast"
"os"
"time"
"wireguard-ui/component"
"wireguard-ui/http/param"
"wireguard-ui/service"
"wireguard-ui/template/render_data"
)
// GenerateConfig
// @description: 生成配置文件
// @receiver script
// @return error
func (script) GenerateConfig() error {
// 获取服务端相关配置
serverEnt, err := service.Setting().GetWGServerForConfig()
if err != nil {
return err
}
global, err := service.Setting().GetWGSetForConfig()
if err != nil {
return err
}
// 获取客户端
clientsEnt, _, err := service.Client().List(param.ClientList{
Page: param.Page{
Current: -1,
Size: -1,
},
})
if err != nil {
return err
}
var clients []render_data.Client
for _, client := range clientsEnt {
clients = append(clients, render_data.Client{
ID: client.Id,
Name: client.Name,
Email: client.Email,
PublicKey: client.Keys.PublicKey,
PresharedKey: client.Keys.PresharedKey,
AllowedIPS: client.AllowedIpsStr,
Endpoint: client.Endpoint,
CreateUser: client.CreateUser,
Enabled: cast.ToBool(client.Enabled),
PersistentKeepalive: global.PersistentKeepalive,
CreatedAt: client.CreatedAt.Format("2006-01-02 15:04:05"),
UpdatedAt: client.UpdatedAt.Format("2006-01-02 15:04:05"),
SyncAt: time.Now().Format("2006-01-02 15:04:05"),
})
}
execData := map[string]any{
"Server": serverEnt,
"Clients": clients,
}
var templatePath, outFilePath string
if os.Getenv("GIN_MODE") != "release" {
templatePath = "E:\\Workspace\\Go\\wireguard-ui\\template\\conf\\wg.conf"
outFilePath = "E:\\Workspace\\Go\\wireguard-ui\\template\\tmp\\wg0.conf"
} else {
templatePath = "./template/wg.conf"
outFilePath = cast.ToString(global.ConfigFilePath)
}
// 先渲染模板
if err = component.Template().Execute(templatePath, outFilePath, execData); err != nil {
return nil
}
// 模板渲染成功,开始执行服务端控制
component.Wireguard().ServerControl(outFilePath)
return nil
}