Skip to content

Commit c044fff

Browse files
authored
chore(connector): [Fiuu] log keys in the PSync response (#7189)
1 parent d5cbc1d commit c044fff

File tree

1 file changed

+68
-1
lines changed
  • crates/hyperswitch_connectors/src/connectors

1 file changed

+68
-1
lines changed

crates/hyperswitch_connectors/src/connectors/fiuu.rs

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
pub mod transformers;
22

3-
use std::collections::{HashMap, HashSet};
3+
use std::{
4+
any::type_name,
5+
borrow::Cow,
6+
collections::{HashMap, HashSet},
7+
};
48

59
use common_enums::{CaptureMethod, PaymentMethod, PaymentMethodType};
610
use common_utils::{
@@ -53,6 +57,40 @@ use crate::{
5357
utils::{self, PaymentMethodDataType},
5458
};
5559

60+
pub fn parse_and_log_keys_in_url_encoded_response<T>(data: &[u8]) {
61+
match std::str::from_utf8(data) {
62+
Ok(query_str) => {
63+
let loggable_keys = [
64+
"status",
65+
"orderid",
66+
"tranID",
67+
"nbcb",
68+
"amount",
69+
"currency",
70+
"paydate",
71+
"channel",
72+
"error_desc",
73+
"error_code",
74+
"extraP",
75+
];
76+
let keys: Vec<(Cow<'_, str>, String)> =
77+
url::form_urlencoded::parse(query_str.as_bytes())
78+
.map(|(key, value)| {
79+
if loggable_keys.contains(&key.to_string().as_str()) {
80+
(key, value.to_string())
81+
} else {
82+
(key, "SECRET".to_string())
83+
}
84+
})
85+
.collect();
86+
router_env::logger::info!("Keys in {} response\n{:?}", type_name::<T>(), keys);
87+
}
88+
Err(err) => {
89+
router_env::logger::error!("Failed to convert bytes to string: {:?}", err);
90+
}
91+
}
92+
}
93+
5694
fn parse_response<T>(data: &[u8]) -> Result<T, errors::ConnectorError>
5795
where
5896
T: for<'de> Deserialize<'de>,
@@ -87,6 +125,27 @@ where
87125
json.insert("miscellaneous".to_string(), misc_value);
88126
}
89127

128+
// TODO: Remove this after debugging
129+
let loggable_keys = [
130+
"StatCode",
131+
"StatName",
132+
"TranID",
133+
"ErrorCode",
134+
"ErrorDesc",
135+
"miscellaneous",
136+
];
137+
let keys: Vec<(&str, Value)> = json
138+
.iter()
139+
.map(|(key, value)| {
140+
if loggable_keys.contains(&key.as_str()) {
141+
(key.as_str(), value.to_owned())
142+
} else {
143+
(key.as_str(), Value::String("SECRET".to_string()))
144+
}
145+
})
146+
.collect();
147+
router_env::logger::info!("Keys in response for type {}\n{:?}", type_name::<T>(), keys);
148+
90149
let response: T = serde_json::from_value(Value::Object(json)).map_err(|e| {
91150
router_env::logger::error!("Error in Deserializing Response Data: {:?}", e);
92151
errors::ConnectorError::ResponseDeserializationFailed
@@ -747,6 +806,7 @@ impl webhooks::IncomingWebhook for Fiuu {
747806
) -> CustomResult<Vec<u8>, errors::ConnectorError> {
748807
let header = utils::get_header_key_value("content-type", request.headers)?;
749808
let resource: FiuuWebhooksResponse = if header == "application/x-www-form-urlencoded" {
809+
parse_and_log_keys_in_url_encoded_response::<FiuuWebhooksResponse>(request.body);
750810
serde_urlencoded::from_bytes::<FiuuWebhooksResponse>(request.body)
751811
.change_context(errors::ConnectorError::WebhookSourceVerificationFailed)?
752812
} else {
@@ -776,6 +836,7 @@ impl webhooks::IncomingWebhook for Fiuu {
776836
) -> CustomResult<Vec<u8>, errors::ConnectorError> {
777837
let header = utils::get_header_key_value("content-type", request.headers)?;
778838
let resource: FiuuWebhooksResponse = if header == "application/x-www-form-urlencoded" {
839+
parse_and_log_keys_in_url_encoded_response::<FiuuWebhooksResponse>(request.body);
779840
serde_urlencoded::from_bytes::<FiuuWebhooksResponse>(request.body)
780841
.change_context(errors::ConnectorError::WebhookSourceVerificationFailed)?
781842
} else {
@@ -833,6 +894,7 @@ impl webhooks::IncomingWebhook for Fiuu {
833894
) -> CustomResult<api_models::webhooks::ObjectReferenceId, errors::ConnectorError> {
834895
let header = utils::get_header_key_value("content-type", request.headers)?;
835896
let resource: FiuuWebhooksResponse = if header == "application/x-www-form-urlencoded" {
897+
parse_and_log_keys_in_url_encoded_response::<FiuuWebhooksResponse>(request.body);
836898
serde_urlencoded::from_bytes::<FiuuWebhooksResponse>(request.body)
837899
.change_context(errors::ConnectorError::WebhookReferenceIdNotFound)?
838900
} else {
@@ -866,6 +928,7 @@ impl webhooks::IncomingWebhook for Fiuu {
866928
) -> CustomResult<api_models::webhooks::IncomingWebhookEvent, errors::ConnectorError> {
867929
let header = utils::get_header_key_value("content-type", request.headers)?;
868930
let resource: FiuuWebhooksResponse = if header == "application/x-www-form-urlencoded" {
931+
parse_and_log_keys_in_url_encoded_response::<FiuuWebhooksResponse>(request.body);
869932
serde_urlencoded::from_bytes::<FiuuWebhooksResponse>(request.body)
870933
.change_context(errors::ConnectorError::WebhookEventTypeNotFound)?
871934
} else {
@@ -891,6 +954,7 @@ impl webhooks::IncomingWebhook for Fiuu {
891954
) -> CustomResult<Box<dyn masking::ErasedMaskSerialize>, errors::ConnectorError> {
892955
let header = utils::get_header_key_value("content-type", request.headers)?;
893956
let payload: FiuuWebhooksResponse = if header == "application/x-www-form-urlencoded" {
957+
parse_and_log_keys_in_url_encoded_response::<FiuuWebhooksResponse>(request.body);
894958
serde_urlencoded::from_bytes::<FiuuWebhooksResponse>(request.body)
895959
.change_context(errors::ConnectorError::WebhookResourceObjectNotFound)?
896960
} else {
@@ -921,6 +985,9 @@ impl webhooks::IncomingWebhook for Fiuu {
921985
Option<hyperswitch_domain_models::router_flow_types::ConnectorMandateDetails>,
922986
errors::ConnectorError,
923987
> {
988+
parse_and_log_keys_in_url_encoded_response::<transformers::FiuuWebhooksPaymentResponse>(
989+
request.body,
990+
);
924991
let webhook_payment_response: transformers::FiuuWebhooksPaymentResponse =
925992
serde_urlencoded::from_bytes::<transformers::FiuuWebhooksPaymentResponse>(request.body)
926993
.change_context(errors::ConnectorError::WebhookResourceObjectNotFound)?;

0 commit comments

Comments
 (0)