diff options
author | Julio Capote <jcapote@gmail.com> | 2023-01-08 14:36:33 +0000 |
---|---|---|
committer | Julio Capote <jcapote@gmail.com> | 2023-01-08 14:36:33 +0000 |
commit | fdcf534c7b0fbb3cdc511cf9f26f16cf677994a6 (patch) | |
tree | 2674d0e5937703802414fc2f63c60e6933770261 /config/config.go | |
parent | ff1d7ddc3f5e386b9c8107456c54ca5f985c7b4b (diff) | |
download | communique-fdcf534c7b0fbb3cdc511cf9f26f16cf677994a6.tar.gz |
config validation
Diffstat (limited to '')
-rw-r--r-- | config/config.go | 44 |
1 files changed, 43 insertions, 1 deletions
diff --git a/config/config.go b/config/config.go index 4c23ba1..62e7136 100644 --- a/config/config.go +++ b/config/config.go @@ -1,6 +1,11 @@ package config -import "time" +import ( + "fmt" + "os" + "regexp" + "time" +) type Config struct { Domain string @@ -18,3 +23,40 @@ type Handler struct { DedupWindow time.Duration Interval time.Duration } + +func (c *Config) Validate() error { + if c.Domain == "" { + return fmt.Errorf("domain cant be blank") + } + if c.DbPath == "" { + return fmt.Errorf("dbPath cant be blank") + } + // TODO do we care? + if len(c.Handlers) == 0 { + return fmt.Errorf("no [[handlers]] defined, nothing to do") + } + + r, _ := regexp.Compile("[A-Za-z0-9]+") + + for _, handler := range c.Handlers { + if handler.Name == "" { + return fmt.Errorf("handler name cant be blank") + } + + matches := r.FindAllString(handler.Name, -1) + if len(matches) != 1 { + return fmt.Errorf("handler names can only be [A-Za-z0-9]") + } + if handler.Interval == 0 { + return fmt.Errorf("handler %s needs interval", handler.Name) + } + if handler.Exec == "" { + return fmt.Errorf("handler %s exec cant be blank", handler.Name) + } + if _, err := os.Stat(handler.Exec); err != nil { + return fmt.Errorf("handler %s exec %s does not exist or is not readable", handler.Name, handler.Exec) + } + + } + return nil +} |