Use TOML for config

This commit is contained in:
tfasano1 2023-09-04 15:20:21 -05:00 committed by Maximilian
parent bb69c16cdf
commit 72e9ee3e43
6 changed files with 36 additions and 43 deletions

View File

@ -18,7 +18,7 @@ fine with getting your hands dirty, but I plan on having it ready to go for more
- Minimal user login/registration + sessions - Minimal user login/registration + sessions
- Config file handling - Config file handling
- Scheduled tasks - Scheduled tasks
- Entire website compiles into a single binary (~10mb) (excluding env.json) - Entire website compiles into a single binary (~10mb) (excluding env.toml)
- Minimal dependencies (just standard library, postgres driver, and experimental package for bcrypt) - Minimal dependencies (just standard library, postgres driver, and experimental package for bcrypt)
<hr> <hr>
@ -41,7 +41,7 @@ fine with getting your hands dirty, but I plan on having it ready to go for more
1. Clone 1. Clone
2. Delete the git folder, so you can start tracking in your own repo 2. Delete the git folder, so you can start tracking in your own repo
3. Run `go get` to install dependencies 3. Run `go get` to install dependencies
4. Copy env_example.json to env.json and fill in the values 4. Copy env_example.toml to env.toml and fill in the values
5. Run `go run main.go` to start the server 5. Run `go run main.go` to start the server
6. Rename the occurences of "GoWeb" to your app name 6. Rename the occurences of "GoWeb" to your app name
7. Start building your app! 7. Start building your app!

View File

@ -9,45 +9,37 @@ import (
type Configuration struct { type Configuration struct {
Db struct { Db struct {
Ip string `json:"DbIp"` Ip string `toml:"DbIp"`
Port string `json:"DbPort"` Port string `toml:"DbPort"`
Name string `json:"DbName"` Name string `toml:"DbName"`
User string `json:"DbUser"` User string `toml:"DbUser"`
Password string `json:"DbPassword"` Password string `toml:"DbPassword"`
AutoMigrate bool `json:"DbAutoMigrate"` AutoMigrate bool `toml:"DbAutoMigrate"`
} }
Listen struct { Listen struct {
Ip string `json:"HttpIp"` Ip string `toml:"HttpIp"`
Port string `json:"HttpPort"` Port string `toml:"HttpPort"`
} }
Template struct { Template struct {
BaseName string `json:"BaseTemplateName"` BaseName string `toml:"BaseTemplateName"`
} }
} }
// LoadConfig loads and returns a configuration struct // LoadConfig loads and returns a configuration struct
func LoadConfig() Configuration { func LoadConfig() Configuration {
c := flag.String("c", "env.json", "Path to the json configuration file") c := flag.String("c", "env.toml", "Path to the toml configuration file")
flag.Parse() flag.Parse()
file, err := os.Open(*c) file, err := os.ReadFile(*c)
if err != nil { if err != nil {
panic("unable to open JSON config file: " + err.Error()) panic("Unable to read TOML config file: " + err.Error())
} }
defer func(file *os.File) { var Config Configuration
err := file.Close() _, err = toml.Decode(string(file), &Config)
if err != nil {
slog.Error("unable to close JSON config file: ", err)
}
}(file)
decoder := json.NewDecoder(file)
Config := Configuration{}
err = decoder.Decode(&Config)
if err != nil { if err != nil {
panic("unable to decode JSON config file: " + err.Error()) panic("Unable to decode TOML config file: " + err.Error())
} }
return Config return Config

View File

@ -1,17 +0,0 @@
{
"Db": {
"DbIp": "127.0.0.1",
"DbPort": "5432",
"DbName": "database",
"DbUser": "user",
"DbPassword": "password",
"DbAutoMigrate": true
},
"Listen": {
"HttpIp": "127.0.0.1",
"HttpPort": "8090"
},
"Template": {
"BaseTemplateName": "templates/base.html"
}
}

14
env_example.toml Normal file
View File

@ -0,0 +1,14 @@
[Db]
DbIp = "127.0.0.1"
DbPort = "5432"
DbName = "test"
DbUser = "postgres"
DbPassword = "postgres"
DbAutoMigrate = true
[Listen]
HttpIp = "127.0.0.1"
HttpPort = "8090"
[Template]
BaseTemplateName = "templates/base.html"

2
go.mod
View File

@ -6,3 +6,5 @@ require (
github.com/lib/pq v1.10.9 github.com/lib/pq v1.10.9
golang.org/x/crypto v0.12.0 golang.org/x/crypto v0.12.0
) )
require github.com/BurntSushi/toml v1.3.2 // indirect

2
go.sum
View File

@ -1,3 +1,5 @@
github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8=
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=