Commit Graph

88 Commits (5027abecd1e5e511064de75fb5248139e1c8fe23)

Author SHA1 Message Date
abcang a2da02626e
Fixed ESLint error (#15214)
* eslint --fix

* fix consistent-return

* fix promise/catch-or-return

* ignore import rule
4 years ago
Eugen Rochko aa10200e58
Fix streaming API allowing connections to persist after access token invalidation (#15111)
Fix #14816
4 years ago
fuyu e39d97f700
Fix crash streaming process when receive invalid json (#14859) 4 years ago
Eugen Rochko 01647b8acb
Fix destructuring error when unsubscribing without subscribing (#14566) 4 years ago
Eugen Rochko ef057584fd
Add support for managing multiple stream subscriptions in a single connection (#14524) 4 years ago
ThibG ddcdddd6fc
Change streaming server to treat blank redis password as password-less auth (#14135)
Fixes #14131

Our `mastodon:setup` task defaults to a blank password rather than the
absence of password, but some versions of Redis reject blank password
authentication when authentication is possible without a password.

The Ruby code only uses the Redis password when it's not blank, so
do the same for the node.js part.
5 years ago
Eugen Rochko 5d8398c8b8
Add E2EE API (#13820) 5 years ago
Takeshi Umeda 26b08a3c54
Add remote only to public timeline (#13504)
* Add remote only to public timeline

* Fix code style
5 years ago
Ben Lubar 0dfba0884e minor server-sent events fixes (#12945)
* Send output on the server-sent events stream immediately so the client sees that it was successfully opened even if it doesn't have any messages.

Fix transparent SSE streaming for the public:local and hashtag:local stream types.

* Tell caches to never store server-sent events.
5 years ago
Eugen Rochko 24552b5160
Add whitelist mode (#11291) 5 years ago
Eugen Rochko e7353c47db
Change default interface of web and streaming from 0.0.0.0 to 127.0.0.1 (#11302) 6 years ago
ThibG d63c3c0cef Improve streaming server security (#10818)
* Check OAuth token scopes in the streaming API

* Use Sec-WebSocket-Protocol instead of query string to pass WebSocket token

Inspired by https://github.com/kubevirt/kubevirt/issues/1242
6 years ago
abcang ca6c93a2f5 Migrate from uws to cws (#10805) 6 years ago
Eugen Rochko 13a7f05030
Fix streaming API always attempting to use SSL with Postgres (#10231)
Fix #10223
6 years ago
Eugen Rochko dbeab5a036
Fix SSL configuration regression in streaming API (#10225)
* Fix SSL configuration regression in streaming API

Fix #10223

* Fix code style issues and integrate #10219

* Fix dumb thing
6 years ago
Sascha 42e733681a config: add DB_SSLMODE for managed/remote PG (#10210)
* config: add DB_SSLMODE for managed/remote PG

* streaming: set PG sslmode, defaults to prefer
6 years ago
Gomasy 8d70d3de38 Fix crash when using UNIX socket (#9036) 6 years ago
Eugen Rochko 369cc5f555
Check if port/socket is available before forking in Streaming API (#9023)
Previously, the server would attempt taking port/socket in worker
process, and if it was taken, fail, which made the master process
create a new worker. This led to really high CPU usage if the
streaming API was started when the port or socket were not
available.

Now, before clustering (forking) into worker processes, a test
server is created and then removed to check if it can be done.
6 years ago
Eugen Rochko 18e7ef6eda
Add check for missing tag param in streaming API (#8955)
* Add check for missing tag param in streaming API

Fixes error:

```
TypeError: Cannot read property 'toLowerCase' of undefined
at app.get (.../streaming/index.js:493:50)
```

* Fix code style issues
6 years ago
Eugen Rochko 774ac47373
Add conversations API (#8832)
* Add conversations API

* Add web UI for conversations

* Add test for conversations API

* Add tests for ConversationAccount

* Improve web UI

* Rename ConversationAccount to AccountConversation

* Remove conversations on block and mute

* Change last_status_id to be a denormalization of status_ids

* Add optimistic locking
6 years ago
Eugen Rochko f37fafe30b
Add health endpoint to streaming API (#8441)
GET /api/v1/streaming/health

Answers with OK. Fix #8337
6 years ago
MIYAGI Hikaru a083604d1d Support UNIX domain socket for streaming service without using PORT (#8217)
* Support UNIX domain socket for streaming service without using PORT

The use of UNIX domain socket for streaming service was not officially supported,
but it was made unofficial to use by setting a path to PORT.
From now on, SOCKET will be used just like setting for puma.

* Hundle relative path
6 years ago
Eugen Rochko 0180037dfb
Fix streaming API still using filtered instead of chosen languages (#8009) 7 years ago
Yamagishi Kazutoshi 7403e5d306 Add media timeline (#6631) 7 years ago
Kaito Sinclaire 156b916caf Direct messages column (#4514)
* Added a timeline for Direct statuses
* Lists all Direct statuses you've sent and received
* Displayed in Getting Started
* Streaming server support for direct TL

* Changes to match other timelines in 2.0
7 years ago
abcang 609bf93029 Perform processing that does not use the database before connecting to the database (#7168) 7 years ago
nullkal ccf4f170de Make sure call `done();` in the listener of public timeline for anonymous connection (#6009) 7 years ago
nullkal 90e7da16a0 Fix the condition in streaming listener (#6008) 7 years ago
erin c986218c3a Improve error handling in streaming/index.js (#5968)
On an unhandled worker exception, we should log the exception
and exit with nonzero status, instead of letting workers
silently fail and restarting them in an endless loop.

Note: we previously tried to handle the `'error'` signal.
That's not a signal Node fires; my patch traps `'uncaughtException'`,
which is what the code was _trying_ to do.
7 years ago
nullkal cfea28216f make it possible to stream public timelines without authorization (#5977)
* make it possible to stream public timelines without authorization

* Fix

* Make eslint allow `value == null`

* Remove redundant line

* Improve style and revert .eslintrc.yml

* Fix streamWsEnd

* Show IP address instead of (anonymous user)

* Add missing semicolon
7 years ago
Baptiste Gelez 2864e5e077 Make it possible to bind streming service to 0.0.0.0 (#5744) 7 years ago
Eugen Rochko 24cafd73a2
Lists (#5703)
* Add structure for lists

* Add list timeline streaming API

* Add list APIs, bind list-account relation to follow relation

* Add API for adding/removing accounts from lists

* Add pagination to lists API

* Add pagination to list accounts API

* Adjust scopes for new APIs

- Creating and modifying lists merely requires "write" scope
- Fetching information about lists merely requires "read" scope

* Add test for wrong user context on list timeline

* Clean up tests
7 years ago
masarakki 0e0c6b1b4b use-DB_NAME-in-development (#5430) 7 years ago
Eugen Rochko 909a6d4661 Fix streaming API double-JSON-encoding status IDs for deletes (#5069) 7 years ago
voidSatisfaction b6f3869f8d Fix streaming url to lowercase (#4804) 7 years ago
Nolan Lawson 3f82d8b979 Gracefully stop streaming server (#4103) 8 years ago
Eugen Rochko ebd2dde688 Restore streaming API output format (#4100)
* Restore streaming API output format

Regression from #4090

* Remove whitespace
8 years ago
Yamagishi Kazutoshi 285038972b Stop using Babel with streaming server (#3950) 8 years ago
Takuya Yoshida e5563843a2 Re-fix errorMiddleware (#3922) 8 years ago
unarist c972e1ee1f Ignore DB_NAME for development env on streaming as well as rails side (#3948) 8 years ago
amazedkoumei 87efa38721 more free pgconfig by .env (#3909)
* more free pgconfig for streaming by .env

* fix wrong default values

* database.yml read ENV as same as streaming server
8 years ago
Takuya Yoshida 0c44316b22 Fix errorMiddleware to prevent "TypeError: res.writeHead is not a function" (#3913)
* Fix errorMiddleware

* Add "eslint-disable-line no-unused-vars"
8 years ago
Yamagishi Kazutoshi eff9416469 Remove unused variables (#3906) 8 years ago
猫吸血鬼ディフリス / 猫ロキP d8ec832806 Fix streaming server. Redis connection subscribe for each channel. (#3828) 8 years ago
Eugen Rochko 0464602978 Fix issue with some Node.js versions not having Array.prototype.includes (#3667)
by using Array.prototype.indexOf instead
8 years ago
Clworld dab8fc4584 Execute PushUpdateWorker only for accounts who uses StreamingAPI just now. (#3278)
* Add redis key "subscribed:timeline:#{account.id}" to indicate active streaming API listeners exists.

* Add endpoint for notification only stream.

* Run PushUpdateWorker only for users uses Streaming API now.

* Move close hander streamTo(Http/Ws) -> stream(Http/Ws)End (Deal with #3370)

* Add stream type for stream start log message.
8 years ago
unarist 9a81be0d37 [RFC] Return 401 for an authentication error on WebSockets (#3411)
* Return 401 for an authentication error on WebSocket

* Use upgradeReq instead of a custom object
8 years ago
unarist 91c789ec63 Don't stream toots from users who have blocked the recipient user (#3300)
* Don't stream toots from users who have blocked the recipient user

This filter was already applied on the `/api/v1/timelines/public` API, but
not yet for the Streaming API.

* Boosted status' account_id doesn't need for filtering in streaming/index.js

This filtering is only for public/hashtag timelines, but boosts already filtered on FanOutOnWriteService because those timelines don't show boosts.
8 years ago
Clworld 45837c533e Re-add stream end log for WebSocket (#3397) 8 years ago
Eugen Rochko 425d02287a Improve streaming API cluster logging (#3370)
* Improve streaming API cluster logging

* Less verbose error middleware logging (stack trace useless there)

* Fix error logging

* Prevent potential issue

* Add missing "done()" in catch of Promise.all, websocket heartbeat re-implemented like in example

* I actually forgot a done(), the absolute madman
8 years ago