mirror of
https://github.com/vx3r/wg-gen-web.git
synced 2024-11-04 17:31:17 +00:00
89 lines
1.8 KiB
Go
89 lines
1.8 KiB
Go
|
package util
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"gitlab.127-0-0-1.fr/vx3r/wg-gen-web/model"
|
||
|
"strings"
|
||
|
"text/template"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
clientTpl = `
|
||
|
[Interface]
|
||
|
Address = {{.Client.Address}}
|
||
|
PrivateKey = {{.Client.PrivateKey}}
|
||
|
DNS = {{.Server.Dns}}
|
||
|
[Peer]
|
||
|
PublicKey = {{.Server.PublicKey}}
|
||
|
PresharedKey = {{.Server.PresharedKey}}
|
||
|
AllowedIPs = {{.Client.AllowedIPs}}
|
||
|
Endpoint = {{.Server.Endpoint}}
|
||
|
PersistentKeepalive = {{.Server.PersistentKeepalive}}`
|
||
|
|
||
|
wgTpl = `
|
||
|
# {{.Server.Name}} / Updated: {{.Server.Updated}} / Created: {{.Server.Created}}
|
||
|
[Interface]
|
||
|
{{range .ServerAdresses}}
|
||
|
Address = {{.}}
|
||
|
{{end}}
|
||
|
ListenPort = {{.Server.ListenPort}}
|
||
|
PrivateKey = {{.Server.PrivateKey}}
|
||
|
{{$server := .Server}}
|
||
|
{{range .Clients}}
|
||
|
{{if .Enable}}
|
||
|
# {{.Name}} / {{.Email}} / Updated: {{.Updated}} / Created: {{.Created}}
|
||
|
[Peer]
|
||
|
PublicKey = {{.PublicKey}}
|
||
|
PresharedKey = {{$server.PresharedKey}}
|
||
|
AllowedIPs = {{.Address}}
|
||
|
{{end}}
|
||
|
{{end}}`
|
||
|
)
|
||
|
|
||
|
func DumpClient(client *model.Client, server *model.Server) (bytes.Buffer, error) {
|
||
|
var tplBuff bytes.Buffer
|
||
|
|
||
|
t, err := template.New("client").Parse(clientTpl)
|
||
|
if err != nil {
|
||
|
return tplBuff, err
|
||
|
}
|
||
|
|
||
|
return dump(t, struct {
|
||
|
Client *model.Client
|
||
|
Server *model.Server
|
||
|
}{
|
||
|
Client: client,
|
||
|
Server: server,
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func DumpServerWg(clients []*model.Client, server *model.Server) (bytes.Buffer, error) {
|
||
|
var tplBuff bytes.Buffer
|
||
|
|
||
|
t, err := template.New("server").Parse(wgTpl)
|
||
|
if err != nil {
|
||
|
return tplBuff, err
|
||
|
}
|
||
|
|
||
|
return dump(t, struct {
|
||
|
Clients []*model.Client
|
||
|
Server *model.Server
|
||
|
ServerAdresses []string
|
||
|
}{
|
||
|
ServerAdresses: strings.Split(server.Address, ","),
|
||
|
Clients: clients,
|
||
|
Server: server,
|
||
|
})
|
||
|
}
|
||
|
|
||
|
func dump(tpl *template.Template , data interface{}) (bytes.Buffer, error) {
|
||
|
var tplBuff bytes.Buffer
|
||
|
|
||
|
err := tpl.Execute(&tplBuff, data)
|
||
|
if err != nil {
|
||
|
return tplBuff, err
|
||
|
}
|
||
|
|
||
|
return tplBuff, nil
|
||
|
}
|