summaryrefslogtreecommitdiff
path: root/internal/validate/formvalidation.go
diff options
context:
space:
mode:
authorLibravatar Vyr Cossont <VyrCossont@users.noreply.github.com>2024-03-06 02:15:58 -0800
committerLibravatar GitHub <noreply@github.com>2024-03-06 11:15:58 +0100
commit61a2b91f454a6eb0dd383fc8614fee154654fa08 (patch)
treefcf6159f00c3a0833e6647dd00cd03d03774e2b2 /internal/validate/formvalidation.go
parent[chore]: Bump github.com/stretchr/testify from 1.8.4 to 1.9.0 (#2714) (diff)
downloadgotosocial-61a2b91f454a6eb0dd383fc8614fee154654fa08.tar.xz
[feature] Filters v1 (#2594)
* Implement client-side v1 filters * Exclude linter false positives * Update test/envparsing.sh * Fix minor Swagger, style, and Bun usage issues * Regenerate Swagger * De-generify filter keywords * Remove updating filter statuses This is an operation that the Mastodon v2 filter API doesn't actually have, because filter statuses, unlike keywords, don't have options: the only info they contain is the status ID to be filtered. * Add a test for filter statuses specifically * De-generify filter statuses * Inline FilterEntry * Use vertical style for Bun operations consistently * Add comment on Filter DB interface * Remove GoLand linter control comments Our existing linters should catch these, or they don't matter very much * Reduce memory ratio for filters
Diffstat (limited to 'internal/validate/formvalidation.go')
-rw-r--r--internal/validate/formvalidation.go42
1 files changed, 42 insertions, 0 deletions
diff --git a/internal/validate/formvalidation.go b/internal/validate/formvalidation.go
index 3d1d05072..b0332a572 100644
--- a/internal/validate/formvalidation.go
+++ b/internal/validate/formvalidation.go
@@ -44,6 +44,7 @@ const (
maximumProfileFieldLength = 255
maximumProfileFields = 6
maximumListTitleLength = 200
+ maximumFilterKeywordLength = 40
)
// Password returns a helpful error if the given password
@@ -306,3 +307,44 @@ func MarkerName(name string) error {
}
return fmt.Errorf("marker timeline name '%s' was not recognized, valid options are '%s', '%s'", name, apimodel.MarkerNameHome, apimodel.MarkerNameNotifications)
}
+
+// FilterKeyword validates the title of a new or updated List.
+func FilterKeyword(keyword string) error {
+ if keyword == "" {
+ return fmt.Errorf("filter keyword must be provided, and must be no more than %d chars", maximumFilterKeywordLength)
+ }
+
+ if length := len([]rune(keyword)); length > maximumFilterKeywordLength {
+ return fmt.Errorf("filter keyword length must be no more than %d chars, provided keyword was %d chars", maximumFilterKeywordLength, length)
+ }
+
+ return nil
+}
+
+// FilterContexts validates the context of a new or updated filter.
+func FilterContexts(contexts []apimodel.FilterContext) error {
+ if len(contexts) == 0 {
+ return fmt.Errorf("at least one filter context is required")
+ }
+ for _, context := range contexts {
+ switch context {
+ case apimodel.FilterContextHome,
+ apimodel.FilterContextNotifications,
+ apimodel.FilterContextPublic,
+ apimodel.FilterContextThread,
+ apimodel.FilterContextAccount:
+ continue
+ default:
+ return fmt.Errorf(
+ "filter context '%s' was not recognized, valid options are '%s', '%s', '%s', '%s', '%s'",
+ context,
+ apimodel.FilterContextHome,
+ apimodel.FilterContextNotifications,
+ apimodel.FilterContextPublic,
+ apimodel.FilterContextThread,
+ apimodel.FilterContextAccount,
+ )
+ }
+ }
+ return nil
+}