@@ -16,6 +16,7 @@ defmodule RealtimeWeb.UserSocket do
16
16
alias Realtime.PostgresCdc
17
17
alias Realtime.Tenants
18
18
19
+ alias RealtimeWeb.TenantRateLimiters
19
20
alias RealtimeWeb.ChannelsAuthorization
20
21
alias RealtimeWeb.RealtimeChannel
21
22
alias RealtimeWeb.RealtimeChannel.Logging
@@ -56,6 +57,7 @@ defmodule RealtimeWeb.UserSocket do
56
57
token when is_binary ( token ) <- token ,
57
58
jwt_secret_dec <- Crypto . decrypt! ( jwt_secret ) ,
58
59
{ :ok , claims } <- ChannelsAuthorization . authorize_conn ( token , jwt_secret_dec , jwt_jwks ) ,
60
+ :ok <- TenantRateLimiters . check_tenant ( tenant ) ,
59
61
{ :ok , postgres_cdc_module } <- PostgresCdc . driver ( postgres_cdc_default ) do
60
62
% Tenant {
61
63
extensions: extensions ,
@@ -111,6 +113,16 @@ defmodule RealtimeWeb.UserSocket do
111
113
log_error ( "MalformedJWT" , "The token provided is not a valid JWT" )
112
114
{ :error , :token_malformed }
113
115
116
+ { :error , :too_many_connections } ->
117
+ msg = "Too many connected users"
118
+ Logging . log_error ( socket , "ConnectionRateLimitReached" , msg )
119
+ { :error , :too_many_connections }
120
+
121
+ { :error , :too_many_joins } ->
122
+ msg = "Too many joins per second"
123
+ Logging . log_error ( socket , "JoinsRateLimitReached" , msg )
124
+ { :error , :too_many_joins }
125
+
114
126
error ->
115
127
log_error ( "ErrorConnectingToWebsocket" , error )
116
128
error
0 commit comments