mirror of
https://github.com/superseriousbusiness/gotosocial
synced 2025-06-05 21:59:39 +02:00
[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
This commit is contained in:
@ -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
|
||||
}
|
||||
|
Reference in New Issue
Block a user