Skip to content

Commit 5d05ffd

Browse files
Debarati GhatakDebarati Ghatak
authored andcommitted
add deserialization error logs
1 parent d878728 commit 5d05ffd

File tree

4 files changed

+93
-49
lines changed

4 files changed

+93
-49
lines changed

crates/diesel_models/src/authentication.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
use common_utils::encryption::Encryption;
1+
use common_utils::{encryption::Encryption, pii};
22
use diesel::{AsChangeset, Identifiable, Insertable, Queryable, Selectable};
3-
use common_utils::pii;
43
use serde::{self, Deserialize, Serialize};
54
use serde_json;
65

crates/hyperswitch_connectors/src/connectors/cybersource/transformers.rs

Lines changed: 79 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1285,15 +1285,31 @@ It is only supported for secure transactions in France.
12851285
*/
12861286

12871287
fn extract_score_id(message_extensions: &[MessageExtensionAttribute]) -> Option<u32> {
1288-
message_extensions
1289-
.iter()
1290-
.find(|attr| attr.id.ends_with("CB-SCORE"))
1291-
.and_then(|attr| {
1292-
attr.id
1293-
.split('_')
1294-
.next()
1295-
.and_then(|prefix| prefix.trim_start_matches('A').parse::<u32>().ok())
1296-
})
1288+
message_extensions.iter().find_map(|attr| {
1289+
attr.id
1290+
.ends_with("CB-SCORE")
1291+
.then(|| {
1292+
attr.id
1293+
.split('_')
1294+
.next()
1295+
.and_then(|p| p.strip_prefix('A'))
1296+
.and_then(|s| {
1297+
s.parse::<u32>().map(Some).unwrap_or_else(|err| {
1298+
router_env::logger::error!(
1299+
"Failed to parse score_id from '{}': {}",
1300+
s,
1301+
err
1302+
);
1303+
None
1304+
})
1305+
})
1306+
.or_else(|| {
1307+
router_env::logger::error!("Unexpected prefix format in id: {}", attr.id);
1308+
None
1309+
})
1310+
})
1311+
.flatten()
1312+
})
12971313
}
12981314

12991315
impl From<common_enums::DecoupledAuthenticationType> for EffectiveAuthenticationType {
@@ -1404,17 +1420,24 @@ impl
14041420
let effective_authentication_type = authn_data.authentication_type.map(Into::into);
14051421
let network_score: Option<u32> =
14061422
if ccard.card_network == Some(common_enums::CardNetwork::CartesBancaires) {
1407-
authn_data
1408-
.message_extension
1409-
.as_ref()
1410-
.and_then(|secret| {
1411-
serde_json::from_value::<Vec<MessageExtensionAttribute>>(
1412-
secret.clone().expose(),
1413-
)
1414-
.ok()
1415-
})
1416-
.as_ref()
1417-
.and_then(|exts| extract_score_id(exts))
1423+
match authn_data.message_extension.as_ref() {
1424+
Some(secret) => {
1425+
let exposed_value = secret.clone().expose();
1426+
match serde_json::from_value::<Vec<MessageExtensionAttribute>>(
1427+
exposed_value,
1428+
) {
1429+
Ok(exts) => extract_score_id(&exts),
1430+
Err(err) => {
1431+
router_env::logger::error!(
1432+
"Failed to deserialize message_extension: {:?}",
1433+
err
1434+
);
1435+
None
1436+
}
1437+
}
1438+
}
1439+
None => None,
1440+
}
14181441
} else {
14191442
None
14201443
};
@@ -1524,17 +1547,24 @@ impl
15241547
.ok();
15251548
let network_score: Option<u32> =
15261549
if ccard.card_network == Some(common_enums::CardNetwork::CartesBancaires) {
1527-
authn_data
1528-
.message_extension
1529-
.as_ref()
1530-
.and_then(|secret| {
1531-
serde_json::from_value::<Vec<MessageExtensionAttribute>>(
1532-
secret.clone().expose(),
1533-
)
1534-
.ok()
1535-
})
1536-
.as_ref()
1537-
.and_then(|exts| extract_score_id(exts))
1550+
match authn_data.message_extension.as_ref() {
1551+
Some(secret) => {
1552+
let exposed_value = secret.clone().expose();
1553+
match serde_json::from_value::<Vec<MessageExtensionAttribute>>(
1554+
exposed_value,
1555+
) {
1556+
Ok(exts) => extract_score_id(&exts),
1557+
Err(err) => {
1558+
router_env::logger::error!(
1559+
"Failed to deserialize message_extension: {:?}",
1560+
err
1561+
);
1562+
None
1563+
}
1564+
}
1565+
}
1566+
None => None,
1567+
}
15381568
} else {
15391569
None
15401570
};
@@ -1649,17 +1679,24 @@ impl
16491679
let network_score: Option<u32> = if token_data.card_network
16501680
== Some(common_enums::CardNetwork::CartesBancaires)
16511681
{
1652-
authn_data
1653-
.message_extension
1654-
.as_ref()
1655-
.and_then(|secret| {
1656-
serde_json::from_value::<Vec<MessageExtensionAttribute>>(
1657-
secret.clone().expose(),
1658-
)
1659-
.ok()
1660-
})
1661-
.as_ref()
1662-
.and_then(|exts| extract_score_id(exts))
1682+
match authn_data.message_extension.as_ref() {
1683+
Some(secret) => {
1684+
let exposed_value = secret.clone().expose();
1685+
match serde_json::from_value::<Vec<MessageExtensionAttribute>>(
1686+
exposed_value,
1687+
) {
1688+
Ok(exts) => extract_score_id(&exts),
1689+
Err(err) => {
1690+
router_env::logger::error!(
1691+
"Failed to deserialize message_extension: {:?}",
1692+
err
1693+
);
1694+
None
1695+
}
1696+
}
1697+
}
1698+
None => None,
1699+
}
16631700
} else {
16641701
None
16651702
};

crates/hyperswitch_connectors/src/connectors/netcetera/transformers.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,9 +168,18 @@ impl
168168
challenge_code: response.three_ds_requestor_challenge_ind,
169169
challenge_cancel: response.challenge_cancel,
170170
challenge_code_reason: response.trans_status_reason,
171-
message_extension: response
172-
.message_extension
173-
.and_then(|v| serde_json::to_value(v).ok().map(Secret::new)),
171+
message_extension: response.message_extension.and_then(|v| {
172+
match serde_json::to_value(&v) {
173+
Ok(val) => Some(Secret::new(val)),
174+
Err(e) => {
175+
router_env::logger::error!(
176+
"Failed to serialize message_extension: {:?}",
177+
e
178+
);
179+
None
180+
}
181+
}
182+
}),
174183
})
175184
}
176185
NetceteraAuthenticationResponse::Error(error_response) => Err(ErrorResponse {

crates/hyperswitch_domain_models/src/router_response_types.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,14 @@ pub mod fraud_check;
33
pub mod revenue_recovery;
44
use std::collections::HashMap;
55

6-
use common_utils::{request::Method, types::MinorUnit};
6+
use common_utils::{pii, request::Method, types::MinorUnit};
77
pub use disputes::{AcceptDisputeResponse, DefendDisputeResponse, SubmitEvidenceResponse};
88

99
use crate::{
1010
errors::api_error_response::ApiErrorResponse,
1111
router_request_types::{authentication::AuthNFlowType, ResponseId},
1212
vault::PaymentMethodVaultingData,
1313
};
14-
use common_utils::pii;
1514

1615
#[derive(Debug, Clone)]
1716
pub struct RefundsResponseData {

0 commit comments

Comments
 (0)