aboutsummaryrefslogtreecommitdiff
path: root/config
diff options
context:
space:
mode:
authorJulio Capote <jcapote@gmail.com>2023-01-08 14:36:33 +0000
committerJulio Capote <jcapote@gmail.com>2023-01-08 14:36:33 +0000
commitfdcf534c7b0fbb3cdc511cf9f26f16cf677994a6 (patch)
tree2674d0e5937703802414fc2f63c60e6933770261 /config
parentff1d7ddc3f5e386b9c8107456c54ca5f985c7b4b (diff)
downloadcommunique-fdcf534c7b0fbb3cdc511cf9f26f16cf677994a6.tar.gz
config validation
Diffstat (limited to 'config')
-rw-r--r--config/config.go44
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
+}