Skip to content

Commit 548bbdc

Browse files
committed
resolve pr comments
1 parent 93f7242 commit 548bbdc

File tree

2 files changed

+17
-20
lines changed

2 files changed

+17
-20
lines changed

crates/api_models/src/proxy.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use std::collections::HashMap;
22

33
use common_utils::request::Method;
44
use serde::{Deserialize, Serialize};
5+
use reqwest::header::HeaderMap;
56
use serde_json::Value;
67
use utoipa::ToSchema;
78

@@ -12,6 +13,18 @@ impl Headers {
1213
pub fn as_map(&self) -> &HashMap<String, String> {
1314
&self.0
1415
}
16+
17+
pub fn from_header_map(headers: Option<&HeaderMap>) -> Self {
18+
headers
19+
.map(|h| {
20+
let map = h
21+
.iter()
22+
.map(|(k, v)| (k.to_string(), v.to_str().unwrap_or("").to_string()))
23+
.collect();
24+
Self(map)
25+
})
26+
.unwrap_or_else(|| Self(HashMap::new()))
27+
}
1528
}
1629

1730
#[derive(Debug, ToSchema, Clone, Deserialize, Serialize)]

crates/router/src/core/proxy.rs

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ pub async fn proxy_core(
3939
.change_context(errors::ApiErrorResponse::InternalServerError)
4040
.attach_printable("Failed to serialize vault data")?;
4141

42-
let processed_body = process_value(req.request_body.clone(), &vault_data)?;
42+
let processed_body = interpolate_token_references_with_vault_data(req.request_body.clone(), &vault_data)?;
4343

4444
let res = execute_proxy_request(&state, &req_wrapper, processed_body).await?;
4545

@@ -48,12 +48,12 @@ pub async fn proxy_core(
4848
Ok(services::ApplicationResponse::Json(proxy_response))
4949
}
5050

51-
fn process_value(value: Value, vault_data: &Value) -> RouterResult<Value> {
51+
fn interpolate_token_references_with_vault_data(value: Value, vault_data: &Value) -> RouterResult<Value> {
5252
match value {
5353
Value::Object(obj) => {
5454
let new_obj = obj
5555
.into_iter()
56-
.map(|(key, val)| process_value(val, vault_data).map(|processed| (key, processed)))
56+
.map(|(key, val)| interpolate_token_references_with_vault_data(val, vault_data).map(|processed| (key, processed)))
5757
.collect::<Result<serde_json::Map<_, _>, error_stack::Report<errors::ApiErrorResponse>>>()?;
5858

5959
Ok(Value::Object(new_obj))
@@ -86,16 +86,10 @@ fn extract_field_from_vault_data(vault_data: &Value, field_name: &str) -> Router
8686
match vault_data {
8787
Value::Object(obj) => find_field_recursively_in_vault_data(obj, field_name)
8888
.ok_or_else(|| {
89-
logger::debug!(
90-
"Field '{}' not found in vault data: {:?}",
91-
field_name,
92-
vault_data
93-
);
9489
errors::ApiErrorResponse::InternalServerError
9590
})
9691
.attach_printable(format!("Field '{}' not found", field_name)),
9792
_ => {
98-
logger::debug!("Vault data is not an object: {:?}", vault_data);
9993
Err(errors::ApiErrorResponse::InternalServerError)
10094
.attach_printable("Vault data is not a valid JSON object")
10195
}
@@ -146,17 +140,7 @@ impl TryFrom<ProxyResponseWrapper> for proxy_api_models::ProxyResponse {
146140
.attach_printable("Failed to parse the response")?;
147141

148142
let status_code = res.status_code;
149-
let response_headers = res
150-
.headers
151-
.as_ref()
152-
.map(|h| {
153-
let map: std::collections::HashMap<_, _> = h
154-
.iter()
155-
.map(|(k, v)| (k.to_string(), v.to_str().unwrap_or("").to_string()))
156-
.collect();
157-
proxy_api_models::Headers(map)
158-
})
159-
.unwrap_or_else(|| proxy_api_models::Headers(std::collections::HashMap::new()));
143+
let response_headers = proxy_api_models::Headers::from_header_map(res.headers.as_ref());
160144

161145
Ok(Self {
162146
response: response_body,

0 commit comments

Comments
 (0)