82 lines
2.1 KiB
Go
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
|
||
|
}
|