diff --git a/main.go b/main.go index abd7b19..fe1ba68 100644 --- a/main.go +++ b/main.go @@ -4,7 +4,6 @@ import ( "flag" "fmt" "net/http" - "os" "time" rice "github.com/GeertJohan/go.rice" @@ -17,12 +16,19 @@ import ( "github.com/ngoduykhanh/wireguard-ui/util" ) -// command-line banner information var ( + // command-line banner information appVersion = "development" gitCommit = "N/A" gitRef = "N/A" buildTime = fmt.Sprintf(time.Now().UTC().Format("01-02-2006 15:04:05")) + // configuration variables + flagDisableLogin bool = false + flagBindAddress string = "0.0.0.0:5000" + flagSendgridApiKey string + flagEmailFrom string + flagEmailFromName string = "WireGuard UI" + flagSessionSecret string ) const ( @@ -35,18 +41,22 @@ const ( ) func init() { - // command-line flags - flagDisableLogin := flag.Bool("disable-login", false, "Disable login page. Turn off authentication.") - flagBindAddress := flag.String("bind-address", "0.0.0.0:5000", "Address:Port to which the app will be bound.") + + // command-line flags and env variables + flag.StringVar(&flagBindAddress, "bind-address", util.LookupEnvOrString("BIND_ADDRESS", flagBindAddress), "Address:Port to which the app will be bound.") + flag.StringVar(&flagSendgridApiKey, "sendgrid-api-key", util.LookupEnvOrString("SENDGRID_API_KEY", flagSendgridApiKey), "Your sendgrid api key.") + 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.Parse() // update runtime config - util.DisableLogin = *flagDisableLogin - util.BindAddress = *flagBindAddress - util.SendgridApiKey = os.Getenv("SENDGRID_API_KEY") - util.EmailFrom = os.Getenv("EMAIL_FROM") - util.EmailFromName = os.Getenv("EMAIL_FROM_NAME") - util.SessionSecret = []byte(os.Getenv("SESSION_SECRET")) + util.DisableLogin = flagDisableLogin + util.BindAddress = flagBindAddress + util.SendgridApiKey = flagSendgridApiKey + util.EmailFrom = flagEmailFrom + util.EmailFromName = flagEmailFromName + util.SessionSecret = []byte(flagSessionSecret) // print app information fmt.Println("Wireguard UI") @@ -57,6 +67,10 @@ func init() { fmt.Println("Git Repo\t:", "https://github.com/ngoduykhanh/wireguard-ui") fmt.Println("Authentication\t:", !util.DisableLogin) fmt.Println("Bind address\t:", util.BindAddress) + //fmt.Println("Sendgrid key\t:", util.SendgridApiKey) + fmt.Println("Email from\t:", util.EmailFrom) + fmt.Println("Email from name\t:", util.EmailFromName) + //fmt.Println("Session secret\t:", util.SessionSecret) } diff --git a/util/util.go b/util/util.go index 5d3805e..7c85e52 100644 --- a/util/util.go +++ b/util/util.go @@ -369,6 +369,35 @@ func WriteWireGuardServerConfig(tmplBox *rice.Box, serverConfig model.Server, cl return nil } +func LookupEnvOrString(key string, defaultVal string) string { + if val, ok := os.LookupEnv(key); ok { + return val + } + return defaultVal +} + +func LookupEnvOrBool(key string, defaultVal bool) bool { + if val, ok := os.LookupEnv(key); ok { + v, err := strconv.ParseBool(val) + if err != nil { + fmt.Fprintf(os.Stderr, "LookupEnvOrInt[%s]: %v\n", key, err) + } + return v + } + return defaultVal +} + +func LookupEnvOrInt(key string, defaultVal int) int { + if val, ok := os.LookupEnv(key); ok { + v, err := strconv.Atoi(val) + if err != nil { + fmt.Fprintf(os.Stderr, "LookupEnvOrInt[%s]: %v\n", key, err) + } + return v + } + return defaultVal +} + // GetCredVar reads value from environment variable or returns fallback func GetCredVar(key, fallback string) string { if value, ok := os.LookupEnv(key); ok {