known.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package goshared
  2. const hostTpl = `
  3. func (m {{ (msgTyp .).Pointer }}) _validateHostname(host string) error {
  4. s := strings.ToLower(strings.TrimSuffix(host, "."))
  5. if len(host) > 253 {
  6. return errors.New("hostname cannot exceed 253 characters")
  7. }
  8. for _, part := range strings.Split(s, ".") {
  9. if l := len(part); l == 0 || l > 63 {
  10. return errors.New("hostname part must be non-empty and cannot exceed 63 characters")
  11. }
  12. if part[0] == '-' {
  13. return errors.New("hostname parts cannot begin with hyphens")
  14. }
  15. if part[len(part)-1] == '-' {
  16. return errors.New("hostname parts cannot end with hyphens")
  17. }
  18. for _, r := range part {
  19. if (r < 'a' || r > 'z') && (r < '0' || r > '9') && r != '-' {
  20. return fmt.Errorf("hostname parts can only contain alphanumeric characters or hyphens, got %q", string(r))
  21. }
  22. }
  23. }
  24. return nil
  25. }
  26. `
  27. const emailTpl = `
  28. func (m {{ (msgTyp .).Pointer }}) _validateEmail(addr string) error {
  29. a, err := mail.ParseAddress(addr)
  30. if err != nil {
  31. return err
  32. }
  33. addr = a.Address
  34. if len(addr) > 254 {
  35. return errors.New("email addresses cannot exceed 254 characters")
  36. }
  37. parts := strings.SplitN(addr, "@", 2)
  38. if len(parts[0]) > 64 {
  39. return errors.New("email address local phrase cannot exceed 64 characters")
  40. }
  41. return m._validateHostname(parts[1])
  42. }
  43. `
  44. const uuidTpl = `
  45. func (m {{ (msgTyp .).Pointer }}) _validateUuid(uuid string) error {
  46. if matched := _{{ snakeCase .File.InputPath.BaseName }}_uuidPattern.MatchString(uuid); !matched {
  47. return errors.New("invalid uuid format")
  48. }
  49. return nil
  50. }
  51. `