From 632a00cb6803e3e6f94099e48fb4198a0ea49f99 Mon Sep 17 00:00:00 2001
From: Narayan Bhat <48803246+Narayanbhat166@users.noreply.github.com>
Date: Wed, 1 May 2024 16:10:30 +0530
Subject: [PATCH] fix(access_token): use fallback to `connector_name` if
`merchant_connector_id` is not present (#4503)
---
crates/common_utils/src/access_token.rs | 4 ++--
.../router/src/core/payments/access_token.rs | 18 +++++++++-----
.../src/db/merchant_connector_account.rs | 24 +++++++++++--------
3 files changed, 28 insertions(+), 18 deletions(-)
diff --git a/crates/common_utils/src/access_token.rs b/crates/common_utils/src/access_token.rs
index 20bac0dafb..56c2a4f784 100644
--- a/crates/common_utils/src/access_token.rs
+++ b/crates/common_utils/src/access_token.rs
@@ -5,7 +5,7 @@ use std::fmt::Display;
/// Create a key for fetching the access token from redis
pub fn create_access_token_key(
merchant_id: impl Display,
- merchant_connector_id: impl Display,
+ merchant_connector_id_or_connector_name: impl Display,
) -> String {
- format!("access_token_{merchant_id}_{merchant_connector_id}")
+ format!("access_token_{merchant_id}_{merchant_connector_id_or_connector_name}")
}
diff --git a/crates/router/src/core/payments/access_token.rs b/crates/router/src/core/payments/access_token.rs
index 49d27d8150..1de9cb60ca 100644
--- a/crates/router/src/core/payments/access_token.rs
+++ b/crates/router/src/core/payments/access_token.rs
@@ -64,14 +64,20 @@ pub async fn add_access_token<
{
let merchant_id = &merchant_account.merchant_id;
let store = &*state.store;
- let merchant_connector_id = connector
+
+ // `merchant_connector_id` may not be present in the below cases
+ // - when straight through routing is used without passing the `merchant_connector_id`
+ // - when creds identifier is passed
+ //
+ // In these cases fallback to `connector_name`.
+ // We cannot use multiple merchant connector account in these cases
+ let merchant_connector_id_or_connector_name = connector
.merchant_connector_id
- .as_ref()
- .ok_or(errors::ApiErrorResponse::InternalServerError)
- .attach_printable("Missing merchant_connector_id in ConnectorData")?;
+ .clone()
+ .unwrap_or(connector.connector_name.to_string());
let old_access_token = store
- .get_access_token(merchant_id, merchant_connector_id)
+ .get_access_token(merchant_id, &merchant_connector_id_or_connector_name)
.await
.change_context(errors::ApiErrorResponse::InternalServerError)
.attach_printable("DB error when accessing the access token")?;
@@ -115,7 +121,7 @@ pub async fn add_access_token<
if let Err(access_token_set_error) = store
.set_access_token(
merchant_id,
- merchant_connector_id.as_str(),
+ &merchant_connector_id_or_connector_name,
access_token.clone(),
)
.await
diff --git a/crates/router/src/db/merchant_connector_account.rs b/crates/router/src/db/merchant_connector_account.rs
index 06d1e505c6..8f50f5f542 100644
--- a/crates/router/src/db/merchant_connector_account.rs
+++ b/crates/router/src/db/merchant_connector_account.rs
@@ -24,13 +24,13 @@ pub trait ConnectorAccessToken {
async fn get_access_token(
&self,
merchant_id: &str,
- merchant_connector_id: &str,
+ merchant_connector_id_or_connector_name: &str,
) -> CustomResult