From b403d4105f3c2e6c4863b2f6f8f2fdaf766c9eaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ferdinand=20M=C3=BCtsch?= Date: Mon, 6 May 2019 00:58:01 +0200 Subject: [PATCH] Read config from env. --- .env.example | 5 +++++ .gitignore | 3 ++- README.md | 8 ++++++++ main.go | 52 +++++++++++++++++++++++++++++++--------------------- 4 files changed, 46 insertions(+), 22 deletions(-) create mode 100644 .env.example create mode 100644 README.md diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..d713aa7 --- /dev/null +++ b/.env.example @@ -0,0 +1,5 @@ +WAKAPI_PORT=3000 +WAKAPI_DB_USER=myuser +WAKAPI_DB_PASSWORD=mysecretpassword +WAKAPI_DB_HOST=localhost +WAKAPI_DB_NAME=wakapi_db \ No newline at end of file diff --git a/.gitignore b/.gitignore index 36d068a..0f6ad8b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ launch.json -.vscode \ No newline at end of file +.vscode +.env \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..853827f --- /dev/null +++ b/README.md @@ -0,0 +1,8 @@ +# wakapi + +## Usage +* Copy `.env.example` to `.env` and set config parameters +* `go run *.go` + +## License +* GPL-v3 @ [Ferdinand Mütsch](https://muetsch.io) \ No newline at end of file diff --git a/main.go b/main.go index 3c077dc..55df0c7 100644 --- a/main.go +++ b/main.go @@ -2,8 +2,7 @@ package main import ( "database/sql" - "flag" - "fmt" + "log" "net/http" "os" "strconv" @@ -11,6 +10,7 @@ import ( "github.com/codegangsta/negroni" "github.com/gorilla/mux" + "github.com/joho/godotenv" "github.com/go-sql-driver/mysql" "github.com/n1try/wakapi/middlewares" @@ -20,20 +20,30 @@ import ( ) func readConfig() models.Config { - portPtr := flag.Int("port", 8080, "Port for the webserver to listen on") - dbUser := flag.String("u", "admin", "Database user") - dbPassword := flag.String("p", "admin", "Database password") - dbHost := flag.String("h", "localhost", "Database host") - dbName := flag.String("db", "wakapi", "Database name") + err := godotenv.Load() + if err != nil { + log.Fatal(err) + } - flag.Parse() + portPtr, err := strconv.Atoi(os.Getenv("WAKAPI_PORT")) + dbUser, valid := os.LookupEnv("WAKAPI_DB_USER") + dbPassword, valid := os.LookupEnv("WAKAPI_DB_PASSWORD") + dbHost, valid := os.LookupEnv("WAKAPI_DB_HOST") + dbName, valid := os.LookupEnv("WAKAPI_DB_NAME") + + if err != nil { + log.Fatal(err) + } + if !valid { + log.Fatal("Config parameters missing.") + } return models.Config{ - Port: *portPtr, - DbHost: *dbHost, - DbUser: *dbUser, - DbPassword: *dbPassword, - DbName: *dbName, + Port: portPtr, + DbHost: dbHost, + DbUser: dbUser, + DbPassword: dbPassword, + DbName: dbName, } } @@ -43,18 +53,18 @@ func main() { // Connect Database dbConfig := mysql.Config{ - User: config.DbUser, - Passwd: config.DbPassword, - Net: "tcp", - Addr: config.DbHost, - DBName: config.DbName, + User: config.DbUser, + Passwd: config.DbPassword, + Net: "tcp", + Addr: config.DbHost, + DBName: config.DbName, + AllowNativePasswords: true, } db, _ := sql.Open("mysql", dbConfig.FormatDSN()) defer db.Close() err := db.Ping() if err != nil { - fmt.Println("Could not connect to database.") - os.Exit(1) + log.Fatal("Could not connect to database.") } // Services @@ -91,6 +101,6 @@ func main() { ReadTimeout: 10 * time.Second, WriteTimeout: 10 * time.Second, } - fmt.Printf("Listening on %+s\n", portString) + log.Printf("Listening on %+s\n", portString) s.ListenAndServe() }