| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
- // SPDX-License-Identifier: Apache-2.0
- package validator // import "miniflux.app/v2/internal/validator"
- import (
- "miniflux.app/v2/internal/locale"
- "miniflux.app/v2/internal/reader/rewrite"
- )
- // IsValidURLRewriteRules reports whether the feed URL rewrite rules are
- // well-formed. Unlike a bare regex check, it verifies the rule matches the
- // rewrite("search"|"replacement") form that RewriteEntryURL actually applies,
- // so malformed rules are rejected at save time rather than silently ignored.
- func IsValidURLRewriteRules(rules string) bool {
- return rewrite.IsValidURLRewriteRules(rules)
- }
- // IsValidRewriteRules validates content rewrite rules, returning a localized
- // error describing the first problem found, or nil when the rules are valid.
- func IsValidRewriteRules(rules string) *locale.LocalizedError {
- if rules == "" {
- return nil
- }
- errs := rewrite.ValidateRules(rules)
- if len(errs) == 0 {
- return nil
- }
- e := errs[0]
- switch e.Kind {
- case rewrite.RuleErrUnknownName:
- return locale.NewLocalizedError("error.feed_rewrite_rule_unknown_name", e.Rule)
- case rewrite.RuleErrMissingArgs:
- return locale.NewLocalizedError("error.feed_rewrite_rule_missing_args", e.Rule)
- case rewrite.RuleErrInvalidRegexp:
- return locale.NewLocalizedError("error.feed_rewrite_rule_invalid_regex", e.Rule, e.Message)
- case rewrite.RuleErrUnquote, rewrite.RuleErrLexical:
- // Lexical (scanner) errors carry a descriptive Message but no token,
- // while unquote errors carry the offending token; show whichever we have.
- detail := e.Token
- if detail == "" {
- detail = e.Message
- }
- return locale.NewLocalizedError("error.feed_rewrite_rule_invalid_syntax", e.Pos.Column, detail)
- default:
- return locale.NewLocalizedError("error.feed_invalid_rewrite_rule")
- }
- }
|