@@ -27,10 +27,13 @@ use std::{
2727
2828use ain_evm:: services:: { Services , IS_SERVICES_INIT_CALL , SERVICES } ;
2929use anyhow:: { format_err, Result } ;
30+ use hyper:: header:: HeaderValue ;
31+ use hyper:: Method ;
3032use jsonrpsee:: core:: server:: rpc_module:: Methods ;
3133use jsonrpsee_server:: ServerBuilder as HttpServerBuilder ;
3234use log:: info;
3335use logging:: CppLogTarget ;
36+ use tower_http:: cors:: CorsLayer ;
3437
3538use crate :: rpc:: {
3639 debug:: { MetachainDebugRPCModule , MetachainDebugRPCServer } ,
@@ -72,9 +75,26 @@ pub fn init_network_json_rpc_service(runtime: &Services, addr: &str) -> Result<(
7275 let addr = addr. parse :: < SocketAddr > ( ) ?;
7376 let max_connections = ain_cpp_imports:: get_max_connections ( ) ;
7477
78+ let middleware = if !ain_cpp_imports:: get_cors_allowed_origin ( ) . is_empty ( ) {
79+ info ! (
80+ "Allowed origins: {}" ,
81+ ain_cpp_imports:: get_cors_allowed_origin( )
82+ ) ;
83+ let cors = CorsLayer :: new ( )
84+ . allow_methods ( [ Method :: POST , Method :: GET , Method :: OPTIONS ] )
85+ . allow_origin ( ain_cpp_imports:: get_cors_allowed_origin ( ) . parse :: < HeaderValue > ( ) ?)
86+ . allow_headers ( [ hyper:: header:: CONTENT_TYPE , hyper:: header:: AUTHORIZATION ] )
87+ . allow_credentials ( true ) ;
88+
89+ tower:: ServiceBuilder :: new ( ) . layer ( cors)
90+ } else {
91+ tower:: ServiceBuilder :: new ( ) . layer ( CorsLayer :: new ( ) )
92+ } ;
93+
7594 let handle = runtime. tokio_runtime . clone ( ) ;
7695 let server = runtime. tokio_runtime . block_on (
7796 HttpServerBuilder :: default ( )
97+ . set_middleware ( middleware)
7898 . max_connections ( max_connections)
7999 . custom_tokio_runtime ( handle)
80100 . build ( addr) ,
0 commit comments