@@ -14,7 +14,8 @@ use axum::routing::{any, delete, get, post};
1414use axum:: { Json as AxumJson , Router } ;
1515use fqdn:: FQDN ;
1616use futures:: Future ;
17- use http:: { StatusCode , Uri } ;
17+ use http:: header:: AUTHORIZATION ;
18+ use http:: { HeaderValue , Method , StatusCode , Uri } ;
1819use instant_acme:: { AccountCredentials , ChallengeType } ;
1920use serde:: { Deserialize , Serialize } ;
2021use shuttle_backends:: auth:: { AuthPublicKey , JwtAuthenticationLayer , ScopedLayer } ;
@@ -34,6 +35,7 @@ use shuttle_proto::provisioner::Ping;
3435use tokio:: sync:: mpsc:: Sender ;
3536use tokio:: sync:: { Mutex , MutexGuard } ;
3637use tower:: ServiceBuilder ;
38+ use tower_http:: cors:: CorsLayer ;
3739use tracing:: { error, field, instrument, trace} ;
3840use ttl_cache:: TtlCache ;
3941use ulid:: Ulid ;
@@ -973,6 +975,22 @@ impl ApiBuilder {
973975 self
974976 }
975977
978+ pub fn with_cors ( mut self , cors_origin : & str ) -> Self {
979+ let cors_layer = CorsLayer :: new ( )
980+ . allow_methods ( vec ! [ Method :: GET , Method :: POST , Method :: DELETE ] )
981+ . allow_headers ( vec ! [ AUTHORIZATION ] )
982+ . max_age ( Duration :: from_secs ( 60 ) * 10 )
983+ . allow_origin (
984+ cors_origin
985+ . parse :: < HeaderValue > ( )
986+ . expect ( "to be able to parse the CORS origin" ) ,
987+ ) ;
988+
989+ self . router = self . router . layer ( cors_layer) ;
990+
991+ self
992+ }
993+
976994 pub fn into_router ( self ) -> Router {
977995 let service = self . service . expect ( "a GatewayService is required" ) ;
978996 let sender = self . sender . expect ( "a task Sender is required" ) ;
0 commit comments