Add minimal config
This commit is contained in:
73
server/config.go
Normal file
73
server/config.go
Normal file
@@ -0,0 +1,73 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"io"
|
||||
"os"
|
||||
|
||||
"github.com/pelletier/go-toml/v2"
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
SiteName string `json:"siteName" toml:"siteName"`
|
||||
HTTPListenAddr string `json:"httpListenAddr" toml:"HTTPListenAddr"`
|
||||
}
|
||||
|
||||
func DefaultConfig() *Config {
|
||||
return &Config{
|
||||
SiteName: "ministream",
|
||||
HTTPListenAddr: ":8080",
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Config) OverrideFromEnv() {
|
||||
if siteName, ok := os.LookupEnv("MINISTREAM_SITENAME"); ok {
|
||||
c.SiteName = siteName
|
||||
}
|
||||
|
||||
if httpAddr, ok := os.LookupEnv("MINISTREAM_HTTPLISTENADDR"); ok {
|
||||
c.HTTPListenAddr = httpAddr
|
||||
}
|
||||
}
|
||||
|
||||
func ConfigFromReader(r io.Reader) (*Config, error) {
|
||||
var c Config
|
||||
|
||||
err := toml.NewDecoder(r).Decode(&c)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &c, nil
|
||||
}
|
||||
|
||||
func ConfigFromFile(path string) (*Config, error) {
|
||||
f, err := os.Open(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
return ConfigFromReader(f)
|
||||
}
|
||||
|
||||
func ConfigFromDefault() (*Config, error) {
|
||||
var config *Config
|
||||
defaultPaths := []string{
|
||||
"ministream.toml",
|
||||
}
|
||||
|
||||
for _, p := range defaultPaths {
|
||||
c, err := ConfigFromFile(p)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
config = c
|
||||
break
|
||||
}
|
||||
|
||||
if config == nil {
|
||||
config = DefaultConfig()
|
||||
}
|
||||
|
||||
return config, nil
|
||||
}
|
37
server/config_test.go
Normal file
37
server/config_test.go
Normal file
@@ -0,0 +1,37 @@
|
||||
package server_test
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"git.t-juice.club/torjus/ministream/server"
|
||||
)
|
||||
|
||||
func TestConfig(t *testing.T) {
|
||||
t.Run("FromReader", func(t *testing.T) {
|
||||
configString := `SiteName = "ministream.example.org"`
|
||||
expectedSiteName := "ministream.example.org"
|
||||
r := strings.NewReader(configString)
|
||||
|
||||
c, err := server.ConfigFromReader(r)
|
||||
if err != nil {
|
||||
t.Fatalf("Error reading config: %s", err)
|
||||
}
|
||||
|
||||
if c.SiteName != expectedSiteName {
|
||||
t.Errorf("SiteName incorrect. Got %s want %s", c.SiteName, expectedSiteName)
|
||||
}
|
||||
})
|
||||
t.Run("OverrideFromEnv", func(t *testing.T) {
|
||||
c := server.DefaultConfig()
|
||||
expectedSiteName := "ms.example.org"
|
||||
|
||||
t.Setenv("MINISTREAM_SITENAME", expectedSiteName)
|
||||
|
||||
c.OverrideFromEnv()
|
||||
|
||||
if c.SiteName != expectedSiteName {
|
||||
t.Errorf("SiteName incorrect. Got %s want %s", c.SiteName, expectedSiteName)
|
||||
}
|
||||
})
|
||||
}
|
Reference in New Issue
Block a user