mastodon/spec/controllers/api/v1
Claire 02851848e9
Revamp post filtering system (#18058)
* Add model for custom filter keywords

* Use CustomFilterKeyword internally

Does not change the API

* Fix /filters/edit and /filters/new

* Add migration tests

* Remove whole_word column from custom_filters (covered by custom_filter_keywords)

* Redesign /filters

Instead of a list, present a card that displays more information and handles
multiple keywords per filter.

* Redesign /filters/new and /filters/edit to add and remove keywords

This adds a new gem dependency: cocoon, as well as a npm dependency:
cocoon-js-vanilla. Those are used to easily populate and remove form fields
from the user interface when manipulating multiple keyword filters at once.

* Add /api/v2/filters to edit filter with multiple keywords

Entities:
- `Filter`: `id`, `title`, `filter_action` (either `hide` or `warn`), `context`
  `keywords`
- `FilterKeyword`: `id`, `keyword`, `whole_word`

API endpoits:
- `GET /api/v2/filters` to list filters (including keywords)
- `POST /api/v2/filters` to create a new filter
  `keywords_attributes` can also be passed to create keywords in one request
- `GET /api/v2/filters/:id` to read a particular filter
- `PUT /api/v2/filters/:id` to update a new filter
  `keywords_attributes` can also be passed to edit, delete or add keywords in
   one request
- `DELETE /api/v2/filters/:id` to delete a particular filter
- `GET /api/v2/filters/:id/keywords` to list keywords for a filter
- `POST /api/v2/filters/:filter_id/keywords/:id` to add a new keyword to a
   filter
- `GET /api/v2/filter_keywords/:id` to read a particular keyword
- `PUT /api/v2/filter_keywords/:id` to edit a particular keyword
- `DELETE /api/v2/filter_keywords/:id` to delete a particular keyword

* Change from `irreversible` boolean to `action` enum

* Remove irrelevent `irreversible_must_be_within_context` check

* Fix /filters/new and /filters/edit with update for filter_action

* Fix Rubocop/Codeclimate complaining about task names

* Refactor FeedManager#phrase_filtered?

This moves regexp building and filter caching to the `CustomFilter` class.

This does not change the functional behavior yet, but this changes how the
cache is built, doing per-custom_filter regexps so that filters can be matched
independently, while still offering caching.

* Perform server-side filtering and output result in REST API

* Fix numerous filters_changed events being sent when editing multiple keywords at once

* Add some tests

* Use the new API in the WebUI

- use client-side logic for filters we have fetched rules for.
  This is so that filter changes can be retroactively applied without
  reloading the UI.
- use server-side logic for filters we haven't fetched rules for yet
  (e.g. network error, or initial timeline loading)

* Minor optimizations and refactoring

* Perform server-side filtering on the streaming server

* Change the wording of filter action labels

* Fix issues pointed out by linter

* Change design of “Show anyway” link in accordence to review comments

* Drop “irreversible” filtering behavior

* Move /api/v2/filter_keywords to /api/v1/filters/keywords

* Rename `filter_results` attribute to `filtered`

* Rename REST::LegacyFilterSerializer to REST::V1::FilterSerializer

* Fix systemChannelId value in streaming server

* Simplify code by removing client-side filtering code

The simplifcation comes at a cost though: filters aren't retroactively
applied anymore.
2022-06-28 09:42:13 +02:00
..
accounts Spelling (#17705) 2022-03-06 22:51:40 +01:00
admin Add /api/v1/admin/domain_allows (#18668) 2022-06-23 23:12:01 +02:00
announcements Add announcements (#12662) 2020-01-23 22:00:13 +01:00
apps Use raw status code on have_http_status (#7214) 2018-04-21 21:35:07 +02:00
emails Fix `POST /api/v1/emails/confirmations` not being available after sign-up (#17743) 2022-03-12 04:14:25 +01:00
filters Revamp post filtering system (#18058) 2022-06-28 09:42:13 +02:00
instances Add specs for Api::V1::Instances::PeersController (#9546) 2018-12-17 11:35:55 +01:00
lists Refactor and improve tests (#17386) 2022-01-28 00:46:42 +01:00
polls Refactor and improve tests (#17386) 2022-01-28 00:46:42 +01:00
push Add `policy` param to `POST /api/v1/push/subscriptions` (#16040) 2021-04-15 05:00:25 +02:00
statuses Spelling (#17705) 2022-03-06 22:51:40 +01:00
timelines Refactor and improve tests (#17386) 2022-01-28 00:46:42 +01:00
trends Add trending statuses (#17431) 2022-02-25 00:34:14 +01:00
accounts_controller_spec.rb Refactor and improve tests (#17386) 2022-01-28 00:46:42 +01:00
announcements_controller_spec.rb Add announcements (#12662) 2020-01-23 22:00:13 +01:00
apps_controller_spec.rb Fix app name, website and redirect URIs not having a maximum length (#16042) 2021-04-15 16:28:43 +02:00
blocks_controller_spec.rb Refactor and improve tests (#17386) 2022-01-28 00:46:42 +01:00
bookmarks_controller_spec.rb Support min_id-based pagination for bookmarks (#12381) 2019-11-17 17:09:41 +01:00
conversations_controller_spec.rb Refactor and improve tests (#17386) 2022-01-28 00:46:42 +01:00
custom_emojis_controller_spec.rb Use raw status code on have_http_status (#7214) 2018-04-21 21:35:07 +02:00
domain_blocks_controller_spec.rb Refactor and improve tests (#17386) 2022-01-28 00:46:42 +01:00
endorsements_controller_spec.rb Add spec for Api::V1::EndorsementsController (#9543) 2018-12-17 11:32:44 +01:00
favourites_controller_spec.rb Support min_id-based pagination in REST API (#8736) 2018-09-28 02:23:45 +02:00
filters_controller_spec.rb Revamp post filtering system (#18058) 2022-06-28 09:42:13 +02:00
follow_requests_controller_spec.rb Refactor and improve tests (#17386) 2022-01-28 00:46:42 +01:00
instances_controller_spec.rb Refactor and improve tests (#17386) 2022-01-28 00:46:42 +01:00
lists_controller_spec.rb Refactor and improve tests (#17386) 2022-01-28 00:46:42 +01:00
markers_controller_spec.rb Refactor and improve tests (#17386) 2022-01-28 00:46:42 +01:00
media_controller_spec.rb Add editing for published statuses (#17320) 2022-02-10 00:15:30 +01:00
mutes_controller_spec.rb Refactor and improve tests (#17386) 2022-01-28 00:46:42 +01:00
notifications_controller_spec.rb Add `types` param to `GET /api/v1/notifications` in REST API (#17767) 2022-03-15 04:11:29 +01:00
polls_controller_spec.rb Refactor and improve tests (#17386) 2022-01-28 00:46:42 +01:00
reports_controller_spec.rb Fix report category not being saved in REST API (#17682) 2022-03-02 18:57:08 +01:00
statuses_controller_spec.rb Revamp post filtering system (#18058) 2022-06-28 09:42:13 +02:00
streaming_controller_spec.rb Lint pass (#8876) 2018-10-04 12:36:53 +02:00
suggestions_controller_spec.rb Re-add follow recommendations API (#7918) 2018-07-03 01:47:56 +02:00