53 lines
1006 B
Go
53 lines
1006 B
Go
package src
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"os"
|
|
)
|
|
|
|
type Config struct {
|
|
Listen string `json:"LISTEN"`
|
|
ConnectionDriver string `json:"CONNECTION_DRIVER"`
|
|
ConnectionString string `json:"CONNECTION_STRING"`
|
|
db DB
|
|
}
|
|
|
|
func NewConfig(ctx context.Context) (Config, error) {
|
|
config, err := newConfig()
|
|
if err != nil {
|
|
return config, err
|
|
}
|
|
|
|
db, err := NewDB(ctx, config.ConnectionDriver, config.ConnectionString)
|
|
if err != nil {
|
|
return config, err
|
|
}
|
|
config.db = db
|
|
|
|
return config, nil
|
|
}
|
|
|
|
func newConfig() (Config, error) {
|
|
config := Config{
|
|
Listen: ":10000",
|
|
ConnectionDriver: "sqlite",
|
|
ConnectionString: "/tmp/red-apter.db",
|
|
}
|
|
b, _ := json.Marshal(config)
|
|
var m map[string]any
|
|
if err := json.Unmarshal(b, &m); err != nil {
|
|
return config, err
|
|
}
|
|
for k := range m {
|
|
if v := os.Getenv(k); v != "" {
|
|
m[k] = v
|
|
}
|
|
}
|
|
b2, _ := json.Marshal(m)
|
|
if err := json.Unmarshal(b2, &config); err != nil {
|
|
return config, err
|
|
}
|
|
return config, nil
|
|
}
|