1+ use std:: env;
2+
13use actix_governor:: { Governor , GovernorConfigBuilder } ;
2- use actix_web:: { web, App , HttpResponse , HttpServer } ;
4+ use actix_web:: { middleware :: Condition , web, App , HttpResponse , HttpServer } ;
35use serde:: { Deserialize , Serialize } ;
46use serde_qs:: actix:: QsQuery ;
57use sqlx:: postgres:: PgPoolOptions ;
@@ -10,6 +12,7 @@ use tracing_actix_web::{DefaultRootSpanBuilder, RequestId, TracingLogger};
1012use crate :: error:: { ErrorResponse , InternalErrorResponse } ;
1113use crate :: tracing:: init_tracing;
1214mod error;
15+ mod key_extractor;
1316mod tracing;
1417mod util;
1518
@@ -844,7 +847,9 @@ async fn main() -> std::io::Result<()> {
844847 . parse ( )
845848 . expect ( "PORT must be a valid number" ) ;
846849
850+ let is_fly = env:: var ( "FLY_APP_NAME" ) . is_ok ( ) ;
847851 let governor_conf = GovernorConfigBuilder :: default ( )
852+ . key_extractor ( key_extractor:: Extractor :: default ( ) )
848853 . seconds_per_request ( 2 )
849854 . burst_size ( 5 )
850855 . finish ( )
@@ -867,13 +872,11 @@ async fn main() -> std::io::Result<()> {
867872 . route ( "/" , web:: get ( ) . to ( index) )
868873 . service (
869874 web:: scope ( "/v1" )
870- . wrap ( Governor :: new ( & governor_conf) )
875+ // add rate-limiter only when deployed to fly.io as it fetches a fly-specific header
876+ . wrap ( Condition :: new ( is_fly, Governor :: new ( & governor_conf) ) )
871877 . route ( "" , web:: get ( ) . to ( index_v1) )
872878 . route ( "/wasms" , web:: get ( ) . to ( get_wasms) )
873- . route (
874- "/wasms/{wasm_name}" ,
875- web:: get ( ) . to ( get_wasm_root_channel) ,
876- )
879+ . route ( "/wasms/{wasm_name}" , web:: get ( ) . to ( get_wasm_root_channel) )
877880 . route (
878881 "/wasms/{channel}/{wasm_name}" ,
879882 web:: get ( ) . to ( get_wasm_latest) ,
0 commit comments