Skip to content

Commit

Permalink
config
Browse files Browse the repository at this point in the history
  • Loading branch information
kdudkov committed Oct 27, 2024
1 parent fc72625 commit 4f3004a
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 27 deletions.
52 changes: 51 additions & 1 deletion cmd/goatak_server/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,13 @@ import (
"crypto/tls"
"crypto/x509"
"fmt"
"log/slog"
"os"
"strings"

"github.com/knadh/koanf/parsers/yaml"
"github.com/knadh/koanf/providers/env"
"github.com/knadh/koanf/providers/file"
"github.com/knadh/koanf/v2"

"github.com/kdudkov/goatak/pkg/tlsutil"
Expand All @@ -20,6 +25,51 @@ type AppConfig struct {
ca []*x509.Certificate
}

func NewAppConfig() *AppConfig {
c := &AppConfig{k: koanf.New(".")}

setDefaults(c.k)

return c
}

func (c *AppConfig) Load(filename ...string) bool {
loaded := false

for _, name := range filename {
if err := c.k.Load(file.Provider(name), yaml.Parser()); err != nil {
slog.Info(fmt.Sprintf("error loading config: %s", err.Error()))
} else {
loaded = true
}
}

return loaded
}

func (c *AppConfig) LoadEnv(prefix string) error {
return c.k.Load(env.Provider(prefix, ".", func(s string) string {
return strings.Replace(strings.ToLower(
strings.TrimPrefix(s, prefix)), "_", ".", -1)
}), nil)
}

func (c *AppConfig) Bool(key string) bool {
return c.k.Bool(key)
}

func (c *AppConfig) String(key string) string {
return c.k.String(key)
}

func (c *AppConfig) Float64(key string) float64 {
return c.k.Float64(key)
}

func (c *AppConfig) Int(key string) int {
return c.k.Int(key)
}

func (c *AppConfig) DataDir() string {
return c.k.String("data_dir")
}
Expand Down Expand Up @@ -115,7 +165,7 @@ func loadPem(name string) ([]*x509.Certificate, error) {
return tlsutil.DecodeAllCerts(pemBytes)
}

func SetDefaults(k *koanf.Koanf) {
func setDefaults(k *koanf.Koanf) {
k.Set("udp_addr", ":8999")
k.Set("tcp_addr", ":8999")
k.Set("ssl_addr", ":8089")
Expand Down
34 changes: 8 additions & 26 deletions cmd/goatak_server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,6 @@ import (

"github.com/glebarez/sqlite"
"github.com/google/uuid"
"github.com/knadh/koanf/parsers/yaml"
"github.com/knadh/koanf/providers/env"
"github.com/knadh/koanf/providers/file"
"github.com/knadh/koanf/v2"
"github.com/prometheus/client_golang/prometheus"
"gorm.io/gorm"
"gorm.io/gorm/logger"
Expand Down Expand Up @@ -456,44 +452,30 @@ func getDatabase() (*gorm.DB, error) {
func main() {
fmt.Printf("version %s\n", getVersion())

conf := flag.String("config", "goatak_server.yml", "name of config file")
configName := flag.String("config", "goatak_server.yml", "name of config file")
flag.Parse()

k := koanf.New(".")

SetDefaults(k)

if err := k.Load(file.Provider(*conf), yaml.Parser()); err != nil {
fmt.Printf("error loading config: %s", err.Error())
return
}

_ = k.Load(env.Provider("GOATAK_", ".", func(s string) string {
return strings.Replace(strings.ToLower(
strings.TrimPrefix(s, "GOATAK_")), "_", ".", -1)
}), nil)
config := NewAppConfig()
config.Load(*configName)
_ = config.LoadEnv("GOATAK_")

var h slog.Handler
if k.Bool("debug") {
if config.Bool("debug") {
h = slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelDebug})
} else {
h = slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelInfo})
}

slog.SetDefault(slog.New(h))

config := &AppConfig{
k: k,
}

if err := config.processCerts(); err != nil {
slog.Default().Error(err.Error())
}

app := NewApp(config)

app.lat = k.Float64("me.lat")
app.lon = k.Float64("me.lon")
app.zoom = int8(k.Int("me.zoom"))
app.lat = config.Float64("me.lat")
app.lon = config.Float64("me.lon")
app.zoom = int8(config.Int("me.zoom"))
app.Run()
}

0 comments on commit 4f3004a

Please sign in to comment.