Compare commits

...

2 Commits

Author SHA1 Message Date
Maximilian
60006b6e4e Use TOML for config 2023-09-04 15:21:26 -05:00
tfasano1
72e9ee3e43 Use TOML for config 2023-09-04 15:20:21 -05:00
6 changed files with 37 additions and 45 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!
@ -62,4 +62,4 @@ fine with getting your hands dirty, but I plan on having it ready to go for more
- You and you alone are responsible for the security and everything else regarding your application. - You and you alone are responsible for the security and everything else regarding your application.
- It is not required, but I ask that when you use this project you give me credit by linking to this repository. - It is not required, but I ask that when you use this project you give me credit by linking to this repository.
- I also ask that when releasing self-hosted or other end-user applications that you release it under - I also ask that when releasing self-hosted or other end-user applications that you release it under
the [GPLv3](https://www.gnu.org/licenses/gpl-3.0.html) license. This too is not required, but I would appreciate it. the [GPLv3](https://www.gnu.org/licenses/gpl-3.0.html) license. This too is not required, but I would appreciate it.

View File

@ -1,53 +1,44 @@
package config package config
import ( import (
"encoding/json"
"flag" "flag"
"log/slog" "github.com/BurntSushi/toml"
"os" "os"
) )
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=