summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/stream/Connection.ts
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2024-08-15 11:35:51 +0100
committerdakkar <dakkar@thenautilus.net>2024-08-15 11:35:51 +0100
commit311a31da58ebfc079653f860ea4cf4ed9a051d42 (patch)
tree2f7b2edb8b87b46782b900d0be3ce5cdd7ad93e6 /packages/backend/src/server/api/stream/Connection.ts
parentmerge: fix webfinger for instances without a `/host-meta` (!593) (diff)
downloadsharkey-311a31da58ebfc079653f860ea4cf4ed9a051d42.tar.gz
sharkey-311a31da58ebfc079653f860ea4cf4ed9a051d42.tar.bz2
sharkey-311a31da58ebfc079653f860ea4cf4ed9a051d42.zip
rough rate limiting for websockets
Diffstat (limited to 'packages/backend/src/server/api/stream/Connection.ts')
-rw-r--r--packages/backend/src/server/api/stream/Connection.ts7
1 files changed, 7 insertions, 0 deletions
diff --git a/packages/backend/src/server/api/stream/Connection.ts b/packages/backend/src/server/api/stream/Connection.ts
index 7dd7db24e5..dfc6f0d298 100644
--- a/packages/backend/src/server/api/stream/Connection.ts
+++ b/packages/backend/src/server/api/stream/Connection.ts
@@ -25,6 +25,7 @@ import type Channel from './channel.js';
export default class Connection {
public user?: MiUser;
public token?: MiAccessToken;
+ private rateLimiter?: () => Promise<boolean>;
private wsConnection: WebSocket.WebSocket;
public subscriber: StreamEventEmitter;
private channels: Channel[] = [];
@@ -48,9 +49,11 @@ export default class Connection {
user: MiUser | null | undefined,
token: MiAccessToken | null | undefined,
+ rateLimiter: () => Promise<boolean>,
) {
if (user) this.user = user;
if (token) this.token = token;
+ if (rateLimiter) this.rateLimiter = rateLimiter;
}
@bindThis
@@ -103,6 +106,10 @@ export default class Connection {
private async onWsConnectionMessage(data: WebSocket.RawData) {
let obj: Record<string, any>;
+ if (this.rateLimiter && await this.rateLimiter()) {
+ return;
+ }
+
try {
obj = JSON.parse(data.toString());
} catch (e) {