From 71ede02e1c0dfadbcf23a5a0c10f23b6cfea1b6c Mon Sep 17 00:00:00 2001 From: Matt3o12 Date: Sat, 29 Jan 2022 09:11:50 +0100 Subject: [PATCH] PresharedKey is now only included if set (#141) PresharedKey is now only set in the server and client config if the key is set and not null (or empty). I added this feature because I was importing old config files from clients that did not have a preshared key set. Clients can be created without preshared keys when editing db/client/ files manually. If the field is not set, wireguard-ui creates invalid configs by producing: PresharedKey = This patch remvoes this behavior and just skips the preshared key if not set. Co-authored-by: Khanh Ngo --- templates/wg.conf | 4 ++-- util/util.go | 38 +++++++++++++++++++++----------------- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/templates/wg.conf b/templates/wg.conf index 5ac207b..745a92f 100644 --- a/templates/wg.conf +++ b/templates/wg.conf @@ -19,6 +19,6 @@ PostDown = {{ .serverConfig.Interface.PostDown }} # Update at: {{ .Client.UpdatedAt }} [Peer] PublicKey = {{ .Client.PublicKey }} -PresharedKey = {{ .Client.PresharedKey }} -AllowedIPs = {{$first :=true}}{{range .Client.AllocatedIPs }}{{if $first}}{{$first = false}}{{else}},{{end}}{{.}}{{end}}{{range .Client.ExtraAllowedIPs }},{{.}}{{end}} +{{if .Client.PresharedKey }}PresharedKey = {{ .Client.PresharedKey }} +{{end}}AllowedIPs = {{$first :=true}}{{range .Client.AllocatedIPs }}{{if $first}}{{$first = false}}{{else}},{{end}}{{.}}{{end}}{{range .Client.ExtraAllowedIPs }},{{.}}{{end}} {{end}}{{end}} diff --git a/util/util.go b/util/util.go index 7622918..7c347a9 100644 --- a/util/util.go +++ b/util/util.go @@ -21,17 +21,21 @@ import ( // BuildClientConfig to create wireguard client config string func BuildClientConfig(client model.Client, server model.Server, setting model.GlobalSetting) string { // Interface section - clientAddress := fmt.Sprintf("Address = %s", strings.Join(client.AllocatedIPs, ",")) - clientPrivateKey := fmt.Sprintf("PrivateKey = %s", client.PrivateKey) + clientAddress := fmt.Sprintf("Address = %s\n", strings.Join(client.AllocatedIPs, ",")) + clientPrivateKey := fmt.Sprintf("PrivateKey = %s\n", client.PrivateKey) clientDNS := "" if client.UseServerDNS { - clientDNS = fmt.Sprintf("DNS = %s", strings.Join(setting.DNSServers, ",")) + clientDNS = fmt.Sprintf("DNS = %s\n", strings.Join(setting.DNSServers, ",")) } // Peer section - peerPublicKey := fmt.Sprintf("PublicKey = %s", server.KeyPair.PublicKey) - peerPresharedKey := fmt.Sprintf("PresharedKey = %s", client.PresharedKey) - peerAllowedIPs := fmt.Sprintf("AllowedIPs = %s", strings.Join(client.AllowedIPs, ",")) + peerPublicKey := fmt.Sprintf("PublicKey = %s\n", server.KeyPair.PublicKey) + peerPresharedKey := "" + if client.PresharedKey != "" { + peerPresharedKey = fmt.Sprintf("PresharedKey = %s\n", client.PresharedKey) + } + + peerAllowedIPs := fmt.Sprintf("AllowedIPs = %s\n", strings.Join(client.AllowedIPs, ",")) desiredHost := setting.EndpointAddress desiredPort := server.Interface.ListenPort @@ -44,24 +48,24 @@ func BuildClientConfig(client model.Client, server model.Server, setting model.G log.Error("Endpoint appears to be incorrectly formatted: ", err) } } - peerEndpoint := fmt.Sprintf("Endpoint = %s:%d", desiredHost, desiredPort) + peerEndpoint := fmt.Sprintf("Endpoint = %s:%d\n", desiredHost, desiredPort) peerPersistentKeepalive := "" if setting.PersistentKeepalive > 0 { - peerPersistentKeepalive = fmt.Sprintf("PersistentKeepalive = %d", setting.PersistentKeepalive) + peerPersistentKeepalive = fmt.Sprintf("PersistentKeepalive = %d\n", setting.PersistentKeepalive) } // build the config as string strConfig := "[Interface]\n" + - clientAddress + "\n" + - clientPrivateKey + "\n" + - clientDNS + "\n\n" + - "[Peer]" + "\n" + - peerPublicKey + "\n" + - peerPresharedKey + "\n" + - peerAllowedIPs + "\n" + - peerEndpoint + "\n" + - peerPersistentKeepalive + "\n" + clientAddress + + clientPrivateKey + + clientDNS + + "\n[Peer]\n" + + peerPublicKey + + peerPresharedKey + + peerAllowedIPs + + peerEndpoint + + peerPersistentKeepalive return strConfig }