1
- use std:: num:: NonZeroU32 ;
2
1
use std:: sync:: Arc ;
3
2
use std:: time:: Duration ;
4
3
@@ -13,14 +12,12 @@ use tracing::{info, warn};
13
12
14
13
extern crate clickhouse as clickhouse_crate;
15
14
use clickhouse_crate:: Client ;
16
- use governor:: middleware:: StateInformationMiddleware ;
17
- use governor:: { Quota , RateLimiter } ;
18
15
use util:: cors:: default_cors;
19
16
20
17
use crate :: background_task:: update_versions;
21
18
use crate :: queue:: moderation:: AutomatedModerationQueue ;
22
19
use crate :: util:: env:: { parse_strings_from_var, parse_var} ;
23
- use crate :: util:: ratelimit:: KeyedRateLimiter ;
20
+ use crate :: util:: ratelimit:: { AsyncRateLimiter , GCRAParameters } ;
24
21
use sync:: friends:: handle_pubsub;
25
22
26
23
pub mod auth;
@@ -57,7 +54,7 @@ pub struct LabrinthConfig {
57
54
pub analytics_queue : Arc < AnalyticsQueue > ,
58
55
pub active_sockets : web:: Data < ActiveSockets > ,
59
56
pub automated_moderation_queue : web:: Data < AutomatedModerationQueue > ,
60
- pub rate_limiter : KeyedRateLimiter ,
57
+ pub rate_limiter : web :: Data < AsyncRateLimiter > ,
61
58
pub stripe_client : stripe:: Client ,
62
59
}
63
60
@@ -93,24 +90,10 @@ pub fn app_setup(
93
90
94
91
let mut scheduler = scheduler:: Scheduler :: new ( ) ;
95
92
96
- let limiter: KeyedRateLimiter = Arc :: new (
97
- RateLimiter :: keyed ( Quota :: per_minute ( NonZeroU32 :: new ( 300 ) . unwrap ( ) ) )
98
- . with_middleware :: < StateInformationMiddleware > ( ) ,
99
- ) ;
100
- let limiter_clone = Arc :: clone ( & limiter) ;
101
- scheduler. run ( Duration :: from_secs ( 60 ) , move || {
102
- info ! (
103
- "Clearing ratelimiter, storage size: {}" ,
104
- limiter_clone. len( )
105
- ) ;
106
- limiter_clone. retain_recent ( ) ;
107
- info ! (
108
- "Done clearing ratelimiter, storage size: {}" ,
109
- limiter_clone. len( )
110
- ) ;
111
-
112
- async move { }
113
- } ) ;
93
+ let limiter = web:: Data :: new ( AsyncRateLimiter :: new (
94
+ redis_pool. clone ( ) ,
95
+ GCRAParameters :: new ( 300 , 300 ) ,
96
+ ) ) ;
114
97
115
98
if enable_background_tasks {
116
99
// The interval in seconds at which the local database is indexed
@@ -329,6 +312,7 @@ pub fn app_config(
329
312
. app_data ( labrinth_config. active_sockets . clone ( ) )
330
313
. app_data ( labrinth_config. automated_moderation_queue . clone ( ) )
331
314
. app_data ( web:: Data :: new ( labrinth_config. stripe_client . clone ( ) ) )
315
+ . app_data ( labrinth_config. rate_limiter . clone ( ) )
332
316
. configure (
333
317
#[ allow( unused_variables) ]
334
318
|cfg| {
0 commit comments