From 2b63ddc6b8c75da73157958198aadc02a7d9feb6 Mon Sep 17 00:00:00 2001 From: Gary Kramlich Date: Fri, 19 Nov 2021 16:53:43 -0600 Subject: [PATCH] Rename the config structs setDefaults to validate This allows us to check for some required values and give an easy to respond to error at startup rather than a lot of validation during run time. --- config/appservice.go | 6 +++--- config/bot.go | 4 ++-- config/bridge.go | 8 ++------ config/config.go | 16 +++++++++++----- config/homeserver.go | 34 ++++++++++++++++++++++++++++++++++ 5 files changed, 52 insertions(+), 16 deletions(-) diff --git a/config/appservice.go b/config/appservice.go index f081c37..1e3f939 100644 --- a/config/appservice.go +++ b/config/appservice.go @@ -13,12 +13,12 @@ type appservice struct { HSToken string `yaml:"hs_token"` } -func (a *appservice) setDefaults() error { +func (a *appservice) validate() error { if a.ID == "" { a.ID = "discord" } - if err := a.Bot.setDefaults(); err != nil { + if err := a.Bot.validate(); err != nil { return err } @@ -35,5 +35,5 @@ func (a *appservice) UnmarshalYAML(unmarshal func(interface{}) error) error { *a = appservice(raw) - return a.setDefaults() + return a.validate() } diff --git a/config/bot.go b/config/bot.go index 71e2ed6..e3e1202 100644 --- a/config/bot.go +++ b/config/bot.go @@ -6,7 +6,7 @@ type bot struct { Avatar string `yaml:"avatar"` } -func (b *bot) setDefaults() error { +func (b *bot) validate() error { if b.Username == "" { b.Username = "discordbot" } @@ -29,5 +29,5 @@ func (b *bot) UnmarshalYAML(unmarshal func(interface{}) error) error { *b = bot(raw) - return b.setDefaults() + return b.validate() } diff --git a/config/bridge.go b/config/bridge.go index 62cf233..afe425f 100644 --- a/config/bridge.go +++ b/config/bridge.go @@ -1,8 +1,6 @@ package config import ( - "fmt" - "bytes" "text/template" ) @@ -13,7 +11,7 @@ type bridge struct { usernameTemplate *template.Template `yaml:"-"` } -func (b *bridge) setDefaults() error { +func (b *bridge) validate() error { var err error if b.UsernameTemplate == "" { @@ -40,14 +38,12 @@ func (b *bridge) UnmarshalYAML(unmarshal func(interface{}) error) error { *b = bridge(raw) - return b.setDefaults() + return b.validate() } func (b bridge) FormatUsername(userid string) string { var buffer bytes.Buffer - fmt.Printf("bridge: %#v\n", b) - b.usernameTemplate.Execute(&buffer, userid) return buffer.String() diff --git a/config/config.go b/config/config.go index 8ace6ff..de8bb47 100644 --- a/config/config.go +++ b/config/config.go @@ -12,12 +12,16 @@ type Config struct { Bridge bridge `yaml:"bridge"` } -func (cfg *Config) setDefaults() error { - if err := cfg.Appservice.setDefaults(); err != nil { +func (cfg *Config) validate() error { + if err := cfg.Homeserver.validate(); err != nil { return err } - if err := cfg.Bridge.setDefaults(); err != nil { + if err := cfg.Appservice.validate(); err != nil { + return err + } + + if err := cfg.Bridge.validate(); err != nil { return err } @@ -32,7 +36,7 @@ func (cfg *Config) UnmarshalYAML(unmarshal func(interface{}) error) error { return err } - return cfg.setDefaults() + return cfg.validate() } func FromBytes(data []byte) (*Config, error) { @@ -42,7 +46,9 @@ func FromBytes(data []byte) (*Config, error) { return nil, err } - cfg.setDefaults() + if err := cfg.validate(); err != nil { + return nil, err + } return &cfg, nil } diff --git a/config/homeserver.go b/config/homeserver.go index 651ac6a..6acce30 100644 --- a/config/homeserver.go +++ b/config/homeserver.go @@ -1,7 +1,41 @@ package config +import ( + "errors" +) + +var ( + ErrHomeserverNoAddress = errors.New("no homeserver address specified") + ErrHomeserverNoDomain = errors.New("no homeserver domain specified") +) + type homeserver struct { Address string `yaml:"address"` Domain string `yaml:"domain"` StatusEndpoint string `yaml:"status_endpoint"` } + +func (h *homeserver) validate() error { + if h.Address == "" { + return ErrHomeserverNoAddress + } + + if h.Domain == "" { + return ErrHomeserverNoDomain + } + + return nil +} + +func (h *homeserver) UnmarshalYAML(unmarshal func(interface{}) error) error { + type rawHomeserver homeserver + + raw := rawHomeserver{} + if err := unmarshal(&raw); err != nil { + return err + } + + *h = homeserver(raw) + + return h.validate() +}