Commit Graph

140 Commits (7d090b2ab6a76676c861f737c3b6922da8c1292b)

Author SHA1 Message Date
Emelia Smith c953dca1de
Streaming: use pgPool.query instead of manually acquiring & releasing a connection () 2024-07-12 12:23:09 +00:00
Emelia Smith d436696f46
Streaming: Fix incorrect type definitions () 2024-07-10 15:59:18 +00:00
Essem 54cc204473
Use WebSocketServer instead of WebSocket.Server in streaming () 2024-06-24 10:29:00 +00:00
Renaud Chaput 899eac1a92
Use modern ES syntax rather than `.call` () 2024-02-27 15:42:05 +00:00
Renaud Chaput 036f5a05e3
Convert the streaming server to ESM ()
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2024-02-27 14:59:20 +00:00
Emelia Smith 491dd97642
Streaming: refactor to custom Error classes ()
Co-authored-by: Renaud Chaput <renchap@gmail.com>
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2024-02-22 13:20:20 +00:00
Emelia Smith 881e8c113c
Refactor: fix streaming postgresql and redis typing issues () 2024-01-25 16:46:02 +00:00
Emelia Smith 3fbf01918f
Streaming: Move more methods to the utils from the main file () 2024-01-22 10:02:26 +00:00
Emelia Smith 1335083bed
Streaming: replace npmlog with pino & pino-http () 2024-01-18 18:40:25 +00:00
Emelia Smith 58830be943
Streaming: Rework websocket server initialisation & authentication code () 2024-01-15 10:36:30 +00:00
Emelia Smith 9826b7780a
Streaming: use standard cors package instead of custom implementation () 2024-01-04 09:18:03 +00:00
Emelia Smith a4de0e364b
Refactor streaming to simplify for logging change () 2023-11-28 14:24:41 +00:00
Emelia Smith 15b2d7eec5
Split streaming server from web server () 2023-11-14 17:43:20 +00:00
Renaud Chaput 774e1189d2
Change `eslint` config to autofix missing comma and indentation in JS files () 2023-10-09 13:38:29 +02:00
Emelia Smith f68d540271
Fix websocket connections being incorrectly decremented twice on errors () 2023-10-02 13:21:43 +02:00
Emelia Smith fbfceb9c77
Add additional metrics for streaming () 2023-09-19 12:25:30 +02:00
Gabriel Simmer be991f1d18
Move to ioredis for streaming ()
Co-authored-by: Emelia Smith <ThisIsMissEm@users.noreply.github.com>
2023-09-01 17:44:28 +02:00
Emelia Smith 6375e390af
Fix: support both DATABASE_URL and DB_PASS () 2023-08-18 15:05:35 +02:00
Emelia Smith 65096c1ccd
Change streaming `/metrics` to include additional metrics () 2023-08-04 16:11:30 +02:00
Renaud Chaput 3554c52795
Fix missing return values in streaming () 2023-07-28 19:11:58 +02:00
Claire 446821a0dc
Swap debug statements in streaming server () 2023-07-28 17:59:31 +02:00
Emelia Smith 81cdc0f972
Fix: Streaming server memory leak in HTTP EventSource cleanup () 2023-07-28 12:06:29 +02:00
Emelia Smith ddaf200c78
Refactor streaming's filtering logic & improve documentation () 2023-07-27 15:38:18 +02:00
Claire 1814990a3d
Fix wrong filters sometimes applying in streaming () 2023-07-27 15:12:10 +02:00
Emelia Smith 215081240f
Add logging of websocket send errors () 2023-06-10 18:35:57 +02:00
Emelia Smith c81f59583c
Fix logging of messages that are binary before closing their connection () 2023-06-10 18:24:37 +02:00
Emelia Smith 16dd3f08c1
Fix performance of streaming by parsing message JSON once () 2023-06-09 19:29:16 +02:00
Renaud Chaput d27216dc46
Enforce import order with ESLint () 2023-05-23 17:15:17 +02:00
Nick Schonning f22b4e556c
Add eslint-plugin-jsdoc () 2023-04-30 02:29:54 +02:00
Emelia Smith 301e03eb8c
Remove clustering from streaming API () 2023-04-26 11:37:51 +02:00
Claire 174352716a
Disable anonymous access to the streaming API () 2023-03-06 21:00:10 +01:00
Eugen Rochko be1792e1d4
Fix streaming API not being usable without `DATABASE_URL` () 2023-03-05 01:52:12 +01:00
Ramūns Usovs 0872f3e3d7
Allow streaming to connect to postgress with self-signed certs () 2023-03-03 21:01:18 +01:00
emilweth 7c45145430
fix metrics format () 2023-02-11 03:00:44 +01:00
emilweth c1b823368c
dot is not allowed () 2023-02-11 02:15:07 +01:00
Eugen Rochko c5a4d8c82d
Add information about database pool to metrics endpoint in streaming API () 2023-02-09 11:24:16 +01:00
Eugen Rochko 4cb7647516
Add database pool configuration over `DB_POOL` to streaming API ()
Add connection timeout of 15s
2023-02-09 11:20:59 +01:00
Eugen Rochko 01584f03e8
Add metrics endpoint to streaming API () 2023-02-03 21:29:23 +01:00
Nick Schonning 06b68490d1
Enable eslint:recommended ruleset ()
* Enable ESLint recommended ruleset

* Disable failing ESLint recommended rules

* Remove rules shadowed by eslint:recommended
2022-12-19 00:51:37 +09:00
Claire 8c3c6dcae9
Fix filters from other users being used in the streaming service () 2022-11-15 02:09:58 +01:00
Claire cd5e98dbdb
Fix public/local timeline posts not being properly filtered ()
* Fix streaming server using wrong property name for matching filters

Late in the PR, the `filter_results` property has been renamed to `filtered`,
but the change has not been reflected in the streaming server code.

* Fix filter_action attribute being an integer instead of a string
2022-11-13 20:59:49 +01:00
Eugen Rochko e7aa2be828
Change how hashtags are normalized ()
* Change how hashtags are normalized

* Fix tests
2022-07-13 15:03:28 +02:00
Claire 02851848e9
Revamp post filtering system ()
* 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
Yamagishi Kazutoshi 5781d1db84
Fix parsing `TRUSTED_PROXY_IP` () 2022-04-19 08:11:58 +01:00
Claire f29458da1d
Fix streaming server sometimes silently dropping subscriptions () 2022-03-21 19:08:29 +01:00
Claire 6ea80ba2a2
Change streaming server error messages when failing to parse client input ()
Fixes 

- prefix JSON parsing error message by “Error parsing message from …”
- output user id if a user is logged in, IP address otherwise
- reduce log level from error to warning when a user is logged in, and to silly
  otherwise
2022-02-16 14:37:26 +01:00
Claire bc066d8936
Fix timeline streaming stopping for multiple sessions instead of one ()
* Fix timeline streaming stopping for multiple sessions instead of one

Fixes .

In updating the code for a newer version of node-redis,  also broke
redis subscription management when multiple streaming clients subscribe to the
same channel.

This commit restores the redis subscription management code.

* Let node-redis actually handle the subscriptions
2022-01-07 19:50:12 +01:00
Lerk 4d1eaf3e6e
Finish update of node-redis ()
* fix streaming redis client

* use console.error instead of console.log

* follow node-redis migration guide

https://github.com/redis/node-redis/blob/master/docs/v3-to-v4.md

* fix config options for node-redis

* keep indentation

* Update streaming/index.js

Co-authored-by: Yamagishi Kazutoshi <ykzts@desire.sh>

Co-authored-by: Yamagishi Kazutoshi <ykzts@desire.sh>
2021-12-25 22:55:06 +01:00
Sasha Sorokin 6c88ebfd4b
fix(streaming): req.scopes can be nullable ()
When checking for required OAuth scopes, an unexpected error could
happen due to missing (null-y) req.scopes. This commit fixes that by
checking if req.scopes are present before checking if any required
scopes are present, otherwise it skips that straight to rejection.
2021-10-13 05:02:55 +02:00
Eugen Rochko a0d4129893
Refactor notifications to go through a separate stream in streaming API ()
Eliminate need to have custom notifications filtering logic in the
streaming API code by publishing notifications into a separate stream
and then simply using the multi-stream capability to subscribe to that
stream when necessary
2021-09-26 13:23:28 +02:00