From 2c8252ff6e427bac347910f10d74d621d72bf499 Mon Sep 17 00:00:00 2001
From: slch <slch000@pm.me>
Date: Tue, 29 Mar 2022 23:07:50 +0400
Subject: [PATCH] Add ability to use custom wg.conf template

---
 main.go        |  4 ++++
 util/config.go |  1 +
 util/util.go   | 21 +++++++++++++++++----
 3 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/main.go b/main.go
index 9f2af3c..061ea10 100644
--- a/main.go
+++ b/main.go
@@ -34,6 +34,7 @@ var (
 	flagEmailFrom      string
 	flagEmailFromName  string = "WireGuard UI"
 	flagSessionSecret  string
+	flagWgConfTemplate string
 )
 
 const (
@@ -60,6 +61,7 @@ func init() {
 	flag.StringVar(&flagEmailFrom, "email-from", util.LookupEnvOrString("EMAIL_FROM_ADDRESS", flagEmailFrom), "'From' email address.")
 	flag.StringVar(&flagEmailFromName, "email-from-name", util.LookupEnvOrString("EMAIL_FROM_NAME", flagEmailFromName), "'From' email name.")
 	flag.StringVar(&flagSessionSecret, "session-secret", util.LookupEnvOrString("SESSION_SECRET", flagSessionSecret), "The key used to encrypt session cookies.")
+	flag.StringVar(&flagWgConfTemplate, "wg-conf-template", util.LookupEnvOrString("WG_CONF_TEMPLATE", flagWgConfTemplate), "Path to custom wg.conf template.")
 	flag.Parse()
 
 	// update runtime config
@@ -75,6 +77,7 @@ func init() {
 	util.EmailFrom = flagEmailFrom
 	util.EmailFromName = flagEmailFromName
 	util.SessionSecret = []byte(flagSessionSecret)
+	util.WgConfTemplate = flagWgConfTemplate
 
 	// print app information
 	fmt.Println("Wireguard UI")
@@ -89,6 +92,7 @@ func init() {
 	fmt.Println("Email from\t:", util.EmailFrom)
 	fmt.Println("Email from name\t:", util.EmailFromName)
 	//fmt.Println("Session secret\t:", util.SessionSecret)
+	fmt.Println("Custom wg.conf\t:", util.WgConfTemplate)
 
 }
 
diff --git a/util/config.go b/util/config.go
index 80cbc9c..60ea251 100644
--- a/util/config.go
+++ b/util/config.go
@@ -16,6 +16,7 @@ var (
 	EmailSubject   string
 	EmailContent   string
 	SessionSecret  []byte
+	WgConfTemplate string
 )
 
 const (
diff --git a/util/util.go b/util/util.go
index 7c347a9..9ef916d 100644
--- a/util/util.go
+++ b/util/util.go
@@ -4,6 +4,7 @@ import (
 	"encoding/json"
 	"errors"
 	"fmt"
+	"io/ioutil"
 	"net"
 	"os"
 	"strconv"
@@ -359,10 +360,22 @@ func ValidateIPAllocation(serverAddresses []string, ipAllocatedList []string, ip
 
 // WriteWireGuardServerConfig to write Wireguard server config. e.g. wg0.conf
 func WriteWireGuardServerConfig(tmplBox *rice.Box, serverConfig model.Server, clientDataList []model.ClientData, globalSettings model.GlobalSetting) error {
-	// read wg.conf template file to string
-	tmplWireguardConf, err := tmplBox.String("wg.conf")
-	if err != nil {
-		return err
+	var tmplWireguardConf string
+
+	// if set, read wg.conf template from WgConfTemplate
+	if len(WgConfTemplate) > 0 {
+		fileContentBytes, err := ioutil.ReadFile(WgConfTemplate)
+		if err != nil {
+			return err
+		}
+		tmplWireguardConf = string(fileContentBytes)
+	} else {
+		// read default wg.conf template file to string
+		fileContent, err := tmplBox.String("wg.conf")
+		if err != nil {
+			return err
+		}
+		tmplWireguardConf = fileContent
 	}
 
 	// parse the template