diff --git a/src/bin_evm_proxy/evm_proxy.ml b/src/bin_evm_proxy/evm_proxy.ml index 246bf01bafdfc907fe98b41c5cd33e5ef1f0aff0..c070c968144c56c4925c002fe318e5a4b8986b28 100644 --- a/src/bin_evm_proxy/evm_proxy.ml +++ b/src/bin_evm_proxy/evm_proxy.ml @@ -3,6 +3,7 @@ (* Open Source License *) (* Copyright (c) 2023 Nomadic Labs *) (* Copyright (c) 2023 Functori *) +(* Copyright (c) 2023 Marigold *) (* *) (* Permission is hereby granted, free of charge, to any person obtaining a *) (* copy of this software and associated documentation files (the "Software"),*) @@ -33,6 +34,8 @@ type config = { rpc_port : int; debug : bool; rollup_node_endpoint : rollup_node_endpoint; + cors_origins : string list; + cors_headers : string list; } let default_config = @@ -41,14 +44,19 @@ let default_config = rpc_port = 8545; debug = true; rollup_node_endpoint = Mockup; + cors_origins = []; + cors_headers = []; } -let make_config ?rpc_addr ?rpc_port ?debug ~rollup_node_endpoint () = +let make_config ?rpc_addr ?rpc_port ?debug ?cors_origins ?cors_headers + ~rollup_node_endpoint () = { rpc_addr = Option.value ~default:default_config.rpc_addr rpc_addr; rpc_port = Option.value ~default:default_config.rpc_port rpc_port; debug = Option.value ~default:default_config.debug debug; rollup_node_endpoint; + cors_origins = Option.value ~default:[] cors_origins; + cors_headers = Option.value ~default:[] cors_headers; } let install_finalizer server = @@ -91,7 +99,15 @@ module Event = struct ("port", Data_encoding.uint16) end -let start {rpc_addr; rpc_port; debug; rollup_node_endpoint} = +let start + { + rpc_addr; + rpc_port; + debug; + rollup_node_endpoint; + cors_origins; + cors_headers; + } = let open Lwt_result_syntax in let open Tezos_rpc_http_server in let p2p_addr = P2p_addr.of_string_exn rpc_addr in @@ -132,9 +148,14 @@ let start {rpc_addr; rpc_port; debug; rollup_node_endpoint} = } in let directory = Services.directory rollup_node_config in + let cors = + Resto_cohttp.Cors. + {allowed_headers = cors_headers; allowed_origins = cors_origins} + in let server = RPC_server.init_server ~acl + ~cors ~media_types:Media_type.all_media_types directory in @@ -168,6 +189,11 @@ module Params = struct | uri -> Endpoint (Uri.of_string uri) in Lwt.return_ok endpoint) + + let string_list = + Tezos_clic.parameter (fun _ s -> + let list = String.split ',' s in + Lwt.return_ok list) end let rpc_addr_arg = @@ -184,6 +210,20 @@ let rpc_port_arg = ~doc:"The EVM proxy server rpc port." Params.int +let cors_allowed_headers_arg = + Tezos_clic.arg + ~long:"cors-headers" + ~placeholder:"ALLOWED_HEADERS" + ~doc:"List of accepted cors headers." + Params.string_list + +let cors_allowed_origins_arg = + Tezos_clic.arg + ~long:"cors-origin" + ~placeholder:"ALLOWED_ORIGINS" + ~doc:"List of accepted cors origins." + Params.string_list + let rollup_node_endpoint_param = Tezos_clic.param ~name:"rollup-node-endpoint" @@ -197,12 +237,26 @@ let main_command = let open Lwt_result_syntax in command ~desc:"Start the RPC server" - (args2 rpc_addr_arg rpc_port_arg) + (args4 + rpc_addr_arg + rpc_port_arg + cors_allowed_origins_arg + cors_allowed_headers_arg) (prefixes ["run"; "with"; "endpoint"] @@ rollup_node_endpoint_param @@ stop) - (fun (rpc_addr, rpc_port) rollup_node_endpoint () -> + (fun (rpc_addr, rpc_port, cors_origins, cors_headers) + rollup_node_endpoint + () -> let*! () = Tezos_base_unix.Internal_event_unix.init () in let*! () = Internal_event.Simple.emit Event.event_starting () in - let config = make_config ?rpc_addr ?rpc_port ~rollup_node_endpoint () in + let config = + make_config + ?rpc_addr + ?rpc_port + ?cors_origins + ?cors_headers + ~rollup_node_endpoint + () + in let* server = start config in let (_ : Lwt_exit.clean_up_callback_id) = install_finalizer server in let wait, _resolve = Lwt.wait () in diff --git a/src/kernel_evm/CHANGES.md b/src/kernel_evm/CHANGES.md index d6012eb12fe9c6a37c85cdbe23658b3a5f3487cb..e11f69a3d0406b459f5687463f39446960ff1970 100644 --- a/src/kernel_evm/CHANGES.md +++ b/src/kernel_evm/CHANGES.md @@ -10,6 +10,7 @@ ### EVM Node - Switch to `ExternalMessageFrame` protocol for external messages. (!9687) +- Add arguments to enable CORS headers. (!9753) ### Bug fixes