diff --git a/handler/routes.go b/handler/routes.go index da7ecd2..2fbea07 100644 --- a/handler/routes.go +++ b/handler/routes.go @@ -98,7 +98,7 @@ func WireGuardClients(db store.IStore) echo.HandlerFunc { } return c.Render(http.StatusOK, "clients.html", map[string]interface{}{ - "baseData": model.BaseData{Active: "", CurrentUser: currentUser(c)}, + "baseData": model.BaseData{Active: "", CurrentUser: currentUser(c), AllowedIPs: util.AllowedIPs}, "clientDataList": clientDataList, }) } @@ -254,6 +254,13 @@ func EmailClient(db store.IStore, mailer emailer.Emailer, emailSubject, emailCon globalSettings, _ := db.GetGlobalSettings() config := util.BuildClientConfig(*clientData.Client, server, globalSettings) + if globalSettings.EmailContent != "" { + emailContent = globalSettings.EmailContent + } + if globalSettings.EmailSubject != "" { + emailSubject = globalSettings.EmailSubject + } + cfg_att := emailer.Attachment{"wg0.conf", []byte(config)} var attachments []emailer.Attachment if clientData.Client.PrivateKey != "" { @@ -609,6 +616,7 @@ func GlobalSettingSubmit(db store.IStore) echo.HandlerFunc { } globalSettings.UpdatedAt = time.Now().UTC() + globalSettings.EmailContent = base64.StdEncoding.EncodeToString([]byte(globalSettings.EmailContent)) // write config to the database if err := db.SaveGlobalSettings(globalSettings); err != nil { diff --git a/main.go b/main.go index 9f2af3c..9c5e3d4 100644 --- a/main.go +++ b/main.go @@ -3,10 +3,11 @@ package main import ( "flag" "fmt" - "github.com/labstack/echo/v4" "net/http" "time" + "github.com/labstack/echo/v4" + rice "github.com/GeertJohan/go.rice" "github.com/ngoduykhanh/wireguard-ui/emailer" "github.com/ngoduykhanh/wireguard-ui/handler" @@ -34,6 +35,8 @@ var ( flagEmailFrom string flagEmailFromName string = "WireGuard UI" flagSessionSecret string + flagClientMTU int + flagAllowedIPs string ) const ( @@ -60,6 +63,8 @@ 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.IntVar(&flagClientMTU, "client-mtu", util.LookupEnvOrInt("CLIENT_MTU", flagClientMTU), "Client default MTU") + flag.StringVar(&flagAllowedIPs, "allowed-ips", util.LookupEnvOrString("ALLOWED_IPS", flagAllowedIPs), "List of default allowed IPs for the client") flag.Parse() // update runtime config @@ -75,6 +80,8 @@ func init() { util.EmailFrom = flagEmailFrom util.EmailFromName = flagEmailFromName util.SessionSecret = []byte(flagSessionSecret) + util.ClientMTU = flagClientMTU + util.AllowedIPs = flagAllowedIPs // print app information fmt.Println("Wireguard UI") diff --git a/model/misc.go b/model/misc.go index 12d6906..2574370 100644 --- a/model/misc.go +++ b/model/misc.go @@ -10,4 +10,5 @@ type Interface struct { type BaseData struct { Active string CurrentUser string + AllowedIPs string } diff --git a/model/setting.go b/model/setting.go index a316172..1adc0b7 100644 --- a/model/setting.go +++ b/model/setting.go @@ -11,5 +11,7 @@ type GlobalSetting struct { MTU int `json:"mtu,string"` PersistentKeepalive int `json:"persistent_keepalive,string"` ConfigFilePath string `json:"config_file_path"` + EmailSubject string `json:"email_subject"` + EmailContent string `json:"email_content"` UpdatedAt time.Time `json:"updated_at"` } diff --git a/store/jsondb/jsondb.go b/store/jsondb/jsondb.go index 9088f54..b72aea9 100644 --- a/store/jsondb/jsondb.go +++ b/store/jsondb/jsondb.go @@ -115,7 +115,18 @@ func (o *JsonDB) GetUser() (model.User, error) { // GetGlobalSettings func to query global settings from the database func (o *JsonDB) GetGlobalSettings() (model.GlobalSetting, error) { settings := model.GlobalSetting{} - return settings, o.conn.Read("server", "global_settings", &settings) + err := o.conn.Read("server", "global_settings", &settings) + if err != nil { + return settings, err + } + if settings.EmailContent != "" { + str, err := base64.StdEncoding.DecodeString(settings.EmailContent) + if err != nil { + return settings, err + } + settings.EmailContent = string(str) + } + return settings, err } // GetServer func to query Server setting from the database diff --git a/templates/base.html b/templates/base.html index a161891..3adae78 100644 --- a/templates/base.html +++ b/templates/base.html @@ -175,7 +175,7 @@ + value="{{if .baseData.AllowedIPs}} {{.baseData.AllowedIPs}} {{else}} 0.0.0.0/0 {{end}}">