opengraph.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package config
  2. import (
  3. "errors"
  4. "fmt"
  5. "time"
  6. )
  7. var (
  8. ErrInvalidOpenGraphConfig = errors.New("config.OpenGraph: invalid OpenGraph configuration")
  9. ErrOpenGraphTTLDoesNotParse = errors.New("config.OpenGraph: ttl does not parse as a Duration, see https://pkg.go.dev/time#ParseDuration (formatted like 5m -> 5 minutes, 2h -> 2 hours, etc)")
  10. ErrOpenGraphMissingProperty = errors.New("config.OpenGraph: default opengraph tags missing a property")
  11. )
  12. type openGraphFileConfig struct {
  13. Override map[string]string `json:"override,omitempty" yaml:"override,omitempty"`
  14. TimeToLive string `json:"ttl" yaml:"ttl"`
  15. Enabled bool `json:"enabled" yaml:"enabled"`
  16. ConsiderHost bool `json:"considerHost" yaml:"enabled"`
  17. }
  18. type OpenGraph struct {
  19. Override map[string]string `json:"override,omitempty" yaml:"override,omitempty"`
  20. TimeToLive time.Duration `json:"ttl" yaml:"ttl"`
  21. Enabled bool `json:"enabled" yaml:"enabled"`
  22. ConsiderHost bool `json:"considerHost" yaml:"enabled"`
  23. }
  24. func (og *openGraphFileConfig) Valid() error {
  25. var errs []error
  26. if _, err := time.ParseDuration(og.TimeToLive); err != nil {
  27. errs = append(errs, fmt.Errorf("%w: ParseDuration(%q) returned: %w", ErrOpenGraphTTLDoesNotParse, og.TimeToLive, err))
  28. }
  29. if len(og.Override) != 0 {
  30. for _, tag := range []string{
  31. "og:title",
  32. } {
  33. if _, ok := og.Override[tag]; !ok {
  34. errs = append(errs, fmt.Errorf("%w: %s", ErrOpenGraphMissingProperty, tag))
  35. }
  36. }
  37. }
  38. if len(errs) != 0 {
  39. return errors.Join(ErrInvalidOpenGraphConfig, errors.Join(errs...))
  40. }
  41. return nil
  42. }