Prechádzať zdrojové kódy

Support .env files if it exists

Bernhard Froehlich 3 rokov pred
rodič
commit
813bd9ebe7
2 zmenil súbory, kde vykonal 23 pridanie a 11 odobranie
  1. 1 1
      README.md
  2. 22 10
      config.go

+ 1 - 1
README.md

@@ -22,7 +22,7 @@ device which produces mail.
 
 ## Main features
 
-* Simple configuration with ini file or environment variables
+* Simple configuration with ini file .env file or environment variables
 * Supports SMTPS/TLS (465), STARTTLS (587) and unencrypted SMTP (25)
 * Checks for sender, receiver, client IP
 * Authentication support with file (LOGIN, PLAIN)

+ 22 - 10
config.go

@@ -47,8 +47,8 @@ var (
 	remotesStr       = flagset.String("remotes", "", "Outgoing SMTP servers")
 
 	// additional flags
-	_                = flagset.String("config", "", "Path to config file (ini format)")
-	versionInfo      = flagset.Bool("version", false, "Show version information")
+	_           = flagset.String("config", "", "Path to config file (ini format)")
+	versionInfo = flagset.Bool("version", false, "Show version information")
 
 	// internal
 	listenAddrs       = []protoAddr{}
@@ -194,14 +194,26 @@ func setupTimeouts() {
 }
 
 func ConfigLoad() {
-	// configuration parsing
-	if err := ff.Parse(flagset, os.Args[1:],
-		ff.WithEnvVarPrefix("smtprelay"),
-		ff.WithConfigFileFlag("config"),
-		ff.WithConfigFileParser(IniParser),
-	); err != nil {
-		fmt.Fprintf(os.Stderr, "error: %v\n", err)
-		os.Exit(1)
+	// use .env file if it exists
+	if _, err := os.Stat(".env"); err == nil {
+		if err := ff.Parse(flagset, os.Args[1:],
+			ff.WithEnvVarPrefix("smtprelay"),
+			ff.WithConfigFile(".env"),
+			ff.WithConfigFileParser(ff.EnvParser),
+		); err != nil {
+			fmt.Fprintf(os.Stderr, "error: %v\n", err)
+			os.Exit(1)
+		}
+	} else {
+		// use env variables and smtprelay.ini file
+		if err := ff.Parse(flagset, os.Args[1:],
+			ff.WithEnvVarPrefix("smtprelay"),
+			ff.WithConfigFileFlag("config"),
+			ff.WithConfigFileParser(IniParser),
+		); err != nil {
+			fmt.Fprintf(os.Stderr, "error: %v\n", err)
+			os.Exit(1)
+		}
 	}
 
 	// Set up logging as soon as possible