package config import ( "fmt" "os" "regexp" "time" ) type Config struct { Domain string Handlers []Handler DbPath string } type Handler struct { Name string AvatarUrl string AvatarContentType string Exec string Summary string 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 }