Skip to content

Commit 7753c02

Browse files
committed
PERP-4568 | update referer header handling in make_node and update BuilderError
1 parent 59c23e7 commit 7753c02

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

packages/cosmos/src/client/node.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ impl CosmosBuilder {
142142
grpc_url: &Arc<String>,
143143
is_fallback: bool,
144144
) -> Result<Node, BuilderError> {
145-
let (url, headers) =
145+
let (url, mut headers) =
146146
parse_cosmos_grpc(grpc_url.as_str()).map_err(|e| BuilderError::InvalidGrpcHeaders {
147147
grpc_url: grpc_url.clone(),
148148
source: e,
@@ -197,6 +197,22 @@ impl CosmosBuilder {
197197

198198
let grpc_channel = grpc_endpoint.connect_lazy();
199199

200+
if !headers.iter().any(|(k, _)| k.as_str() == "referer") {
201+
if let Some(referer) = self.referer_header() {
202+
let mut vec = headers.as_ref().to_vec();
203+
vec.push((
204+
MetadataKey::from_bytes(b"referer").unwrap(),
205+
MetadataValue::from_str(referer).map_err(|_| {
206+
BuilderError::InvalidRefererHeader {
207+
referer: Arc::new(referer.to_string()),
208+
source: Status::invalid_argument("Invalid referer header value"),
209+
}
210+
})?,
211+
));
212+
headers = Arc::from(vec.into_boxed_slice());
213+
}
214+
}
215+
200216
let interceptor = CosmosInterceptor(headers);
201217
let channel = InterceptedService::new(grpc_channel, interceptor);
202218
let max_decoding_message_size = self.get_max_decoding_message_size();

packages/cosmos/src/error.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,11 @@ pub enum BuilderError {
107107
grpc_url: Arc<String>,
108108
source: tonic::Status,
109109
},
110+
#[error("Invalid referer header in {referer}: {source}")]
111+
InvalidRefererHeader {
112+
referer: Arc<String>,
113+
source: tonic::Status,
114+
},
110115
}
111116

112117
/// Parse errors while interacting with chain data.

0 commit comments

Comments
 (0)