From aba098d8e851ed4883c418f6b8c7cf8a22ed760f Mon Sep 17 00:00:00 2001 From: Redouane Lakrache Date: Sat, 27 Apr 2024 01:51:27 +0200 Subject: [PATCH] [RelayMiner] Support https backend urls (#507) --- pkg/relayer/config/proxy_http_config_parser.go | 6 +++--- pkg/relayer/config/supplier_hydrator.go | 4 ++-- pkg/relayer/proxy/synchronous.go | 16 +++++++++++++++- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/pkg/relayer/config/proxy_http_config_parser.go b/pkg/relayer/config/proxy_http_config_parser.go index ad704d306..1ce7695c5 100644 --- a/pkg/relayer/config/proxy_http_config_parser.go +++ b/pkg/relayer/config/proxy_http_config_parser.go @@ -26,11 +26,11 @@ func (serverConfig *RelayMinerServerConfig) parseHTTPServerConfig( return nil } -// parseHTTPSupplierConfig populates the supplier fields of the target structure -// that are relevant to "http" specific service configurations. +// parseSupplierBackendUrl populates the supplier fields of the target structure +// that are relevant to "http" and "https" backend url service configurations. // This function alters the target RelayMinerSupplierServiceConfig structure // as a side effect. -func (supplierServiceConfig *RelayMinerSupplierServiceConfig) parseHTTPSupplierConfig( +func (supplierServiceConfig *RelayMinerSupplierServiceConfig) parseSupplierBackendUrl( yamlSupplierServiceConfig YAMLRelayMinerSupplierServiceConfig, ) error { // Check if the supplier backend url is empty diff --git a/pkg/relayer/config/supplier_hydrator.go b/pkg/relayer/config/supplier_hydrator.go index 1fbb8e979..2284b24ce 100644 --- a/pkg/relayer/config/supplier_hydrator.go +++ b/pkg/relayer/config/supplier_hydrator.go @@ -68,10 +68,10 @@ func (supplierConfig *RelayMinerSupplierConfig) HydrateSupplier( // by their own functions. supplierConfig.ServiceConfig = &RelayMinerSupplierServiceConfig{} switch backendUrl.Scheme { - case "http": + case "http", "https": supplierConfig.ServerType = RelayMinerServerTypeHTTP if err := supplierConfig.ServiceConfig. - parseHTTPSupplierConfig(yamlSupplierConfig.ServiceConfig); err != nil { + parseSupplierBackendUrl(yamlSupplierConfig.ServiceConfig); err != nil { return err } default: diff --git a/pkg/relayer/proxy/synchronous.go b/pkg/relayer/proxy/synchronous.go index 75d76679b..0156f50ca 100644 --- a/pkg/relayer/proxy/synchronous.go +++ b/pkg/relayer/proxy/synchronous.go @@ -4,6 +4,7 @@ import ( "bytes" "compress/gzip" "context" + "crypto/tls" "fmt" "io" "net/http" @@ -277,8 +278,21 @@ func (sync *synchronousRPCServer) serveHTTP( relayHTTPRequest.Header.Add(key, value) } + // Configure the HTTP client to use the appropriate transport based on the + // backend URL scheme. + var client *http.Client + switch serviceConfig.BackendUrl.Scheme { + case "https": + transport := &http.Transport{ + TLSClientConfig: &tls.Config{}, + } + client = &http.Client{Transport: transport} + default: + client = http.DefaultClient + } + // Send the relay request to the native service. - httpResponse, err := http.DefaultClient.Do(relayHTTPRequest) + httpResponse, err := client.Do(relayHTTPRequest) if err != nil { return nil, err }