validator.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
  2. // SPDX-License-Identifier: Apache-2.0
  3. package validator // import "miniflux.app/v2/internal/validator"
  4. import (
  5. "errors"
  6. "fmt"
  7. "net/url"
  8. "regexp"
  9. "miniflux.app/v2/internal/locale"
  10. )
  11. // ValidationError represents a validation error.
  12. type ValidationError struct {
  13. TranslationKey string
  14. }
  15. // NewValidationError initializes a validation error.
  16. func NewValidationError(translationKey string) *ValidationError {
  17. return &ValidationError{TranslationKey: translationKey}
  18. }
  19. func (v *ValidationError) String() string {
  20. return locale.NewPrinter("en_US").Printf(v.TranslationKey)
  21. }
  22. func (v *ValidationError) Error() error {
  23. return errors.New(v.String())
  24. }
  25. // ValidateRange makes sure the offset/limit values are valid.
  26. func ValidateRange(offset, limit int) error {
  27. if offset < 0 {
  28. return fmt.Errorf(`Offset value should be >= 0`)
  29. }
  30. if limit < 0 {
  31. return fmt.Errorf(`Limit value should be >= 0`)
  32. }
  33. return nil
  34. }
  35. // ValidateDirection makes sure the sorting direction is valid.
  36. func ValidateDirection(direction string) error {
  37. switch direction {
  38. case "asc", "desc":
  39. return nil
  40. }
  41. return fmt.Errorf(`Invalid direction, valid direction values are: "asc" or "desc"`)
  42. }
  43. // IsValidRegex verifies if the regex can be compiled.
  44. func IsValidRegex(expr string) bool {
  45. _, err := regexp.Compile(expr)
  46. return err == nil
  47. }
  48. // IsValidURL verifies if the provided value is a valid absolute URL.
  49. func IsValidURL(absoluteURL string) bool {
  50. _, err := url.ParseRequestURI(absoluteURL)
  51. return err == nil
  52. }