Validate cookie policy link in banner description

Translations are no longer part of the version snapshot, so the
banner_description text must be validated at write time to ensure
the {{cookie_policy_link}} placeholder is present. Without it
the cookie policy URL silently disappears from the rendered banner.

Signed-off-by: Émile Ré <emile@getprobo.com>
This commit is contained in:
Émile Ré
2026-05-02 19:09:16 +04:00
parent 33940d63ca
commit 9d4af4d73e
4 changed files with 117 additions and 1 deletions

View File

@@ -68,6 +68,30 @@ func MaxLen(maxLength int) ValidatorFunc {
}
}
// ContainsSubstring validates that a string contains the specified substring.
func ContainsSubstring(substr string) ValidatorFunc {
return func(value any) *ValidationError {
actualValue, isNil := dereferenceValue(value)
if isNil {
return nil
}
str, ok := actualValue.(string)
if !ok {
return newValidationError(ErrorCodeInvalidFormat, "value must be a string")
}
if !strings.Contains(str, substr) {
return newValidationError(
ErrorCodeInvalidFormat,
fmt.Sprintf("must contain %q", substr),
)
}
return nil
}
}
// OneOfSlice validates that a value is one of the allowed values in the slice.
// Accepts a slice of any type. Compares by value first, then by string representation.
func OneOfSlice[T any](allowed []T) ValidatorFunc {