rewrite.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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. "miniflux.app/v2/internal/locale"
  6. "miniflux.app/v2/internal/reader/rewrite"
  7. )
  8. // IsValidURLRewriteRules reports whether the feed URL rewrite rules are
  9. // well-formed. Unlike a bare regex check, it verifies the rule matches the
  10. // rewrite("search"|"replacement") form that RewriteEntryURL actually applies,
  11. // so malformed rules are rejected at save time rather than silently ignored.
  12. func IsValidURLRewriteRules(rules string) bool {
  13. return rewrite.IsValidURLRewriteRules(rules)
  14. }
  15. // IsValidRewriteRules validates content rewrite rules, returning a localized
  16. // error describing the first problem found, or nil when the rules are valid.
  17. func IsValidRewriteRules(rules string) *locale.LocalizedError {
  18. if rules == "" {
  19. return nil
  20. }
  21. errs := rewrite.ValidateRules(rules)
  22. if len(errs) == 0 {
  23. return nil
  24. }
  25. e := errs[0]
  26. switch e.Kind {
  27. case rewrite.RuleErrUnknownName:
  28. return locale.NewLocalizedError("error.feed_rewrite_rule_unknown_name", e.Rule)
  29. case rewrite.RuleErrMissingArgs:
  30. return locale.NewLocalizedError("error.feed_rewrite_rule_missing_args", e.Rule)
  31. case rewrite.RuleErrInvalidRegexp:
  32. return locale.NewLocalizedError("error.feed_rewrite_rule_invalid_regex", e.Rule, e.Message)
  33. case rewrite.RuleErrUnquote, rewrite.RuleErrLexical:
  34. // Lexical (scanner) errors carry a descriptive Message but no token,
  35. // while unquote errors carry the offending token; show whichever we have.
  36. detail := e.Token
  37. if detail == "" {
  38. detail = e.Message
  39. }
  40. return locale.NewLocalizedError("error.feed_rewrite_rule_invalid_syntax", e.Pos.Column, detail)
  41. default:
  42. return locale.NewLocalizedError("error.feed_invalid_rewrite_rule")
  43. }
  44. }