feat(users): add some checks for prod-intent send to biz email (#3631)

Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
Pritish Budhiraja
2024-02-13 20:04:45 +05:30
committed by GitHub
parent 8853a60bf4
commit 774a0322aa
2 changed files with 23 additions and 9 deletions

View File

@ -4,10 +4,10 @@ use diesel_models::{
};
use error_stack::ResultExt;
#[cfg(feature = "email")]
use masking::ExposeInterface;
#[cfg(feature = "email")]
use router_env::logger;
#[cfg(feature = "email")]
use crate::services::email::types as email_types;
use crate::{
core::errors::{UserErrors, UserResponse, UserResult},
routes::AppState,
@ -15,6 +15,8 @@ use crate::{
types::domain::{user::dashboard_metadata as types, MerchantKeyStore},
utils::user::dashboard_metadata as utils,
};
#[cfg(feature = "email")]
use crate::{services::email::types as email_types, types::domain};
pub async fn set_metadata(
state: AppState,
@ -446,8 +448,8 @@ async fn insert_metadata(
metadata = utils::update_user_scoped_metadata(
state,
user.user_id.clone(),
user.merchant_id,
user.org_id,
user.merchant_id.clone(),
user.org_id.clone(),
metadata_key,
data.clone(),
)
@ -457,7 +459,13 @@ async fn insert_metadata(
#[cfg(feature = "email")]
{
if utils::is_prod_email_required(&data) {
let user_data = user.get_user(state).await?;
let user_email = domain::UserEmail::from_pii_email(user_data.email.clone())
.change_context(UserErrors::InternalServerError)?
.get_secret()
.expose();
if utils::is_prod_email_required(&data, user_email) {
let email_contents = email_types::BizEmailProd::new(state, data)?;
let send_email_result = state
.email_client

View File

@ -279,9 +279,15 @@ pub fn parse_string_to_enums(query: String) -> UserResult<GetMultipleMetaDataPay
})
}
pub fn is_prod_email_required(data: &ProdIntent) -> bool {
!(data
.poc_email
fn not_contains_string(value: &Option<String>, value_to_be_checked: &str) -> bool {
value
.as_ref()
.map_or(true, |mail| mail.contains("juspay")))
.map_or(false, |mail| !mail.contains(value_to_be_checked))
}
pub fn is_prod_email_required(data: &ProdIntent, user_email: String) -> bool {
not_contains_string(&data.poc_email, "juspay")
&& not_contains_string(&data.business_website, "juspay")
&& not_contains_string(&data.business_website, "hyperswitch")
&& not_contains_string(&Some(user_email), "juspay")
}