1
1
use actix_web:: web;
2
2
#[ cfg( all( feature = "olap" , feature = "kms" ) ) ]
3
3
use api_models:: verifications:: { self , ApplepayMerchantResponse } ;
4
+ use common_utils:: errors:: CustomResult ;
5
+ use diesel_models:: business_profile:: { BusinessProfile , BusinessProfileUpdateInternal } ;
4
6
use error_stack:: { Report , ResultExt } ;
5
7
#[ cfg( feature = "kms" ) ]
6
8
use external_services:: kms;
@@ -19,7 +21,7 @@ pub async fn verify_merchant_creds_for_applepay(
19
21
_req : & actix_web:: HttpRequest ,
20
22
body : web:: Json < verifications:: ApplepayMerchantVerificationRequest > ,
21
23
kms_config : & kms:: KmsConfig ,
22
- ) -> common_utils :: errors :: CustomResult <
24
+ ) -> CustomResult <
23
25
services:: ApplicationResponse < ApplepayMerchantResponse > ,
24
26
api_error_response:: ApiErrorResponse ,
25
27
> {
@@ -30,7 +32,6 @@ pub async fn verify_merchant_creds_for_applepay(
30
32
let encrypted_cert = & state. conf . applepay_merchant_configs . merchant_cert ;
31
33
let encrypted_key = & state. conf . applepay_merchant_configs . merchant_cert_key ;
32
34
let applepay_endpoint = & state. conf . applepay_merchant_configs . applepay_endpoint ;
33
-
34
35
let applepay_internal_merchant_identifier = kms:: get_kms_client ( kms_config)
35
36
. await
36
37
. decrypt ( encrypted_merchant_identifier)
@@ -84,10 +85,19 @@ pub async fn verify_merchant_creds_for_applepay(
84
85
85
86
// Error is already logged
86
87
Ok ( match applepay_response {
87
- Ok ( _) => services:: api:: ApplicationResponse :: Json ( ApplepayMerchantResponse {
88
- status_code : "200" . to_string ( ) ,
89
- status_message : "Applepay verification Completed" . to_string ( ) ,
90
- } ) ,
88
+ Ok ( _) => {
89
+ check_existence_and_add_domain_to_db (
90
+ state,
91
+ body. business_profile_id . clone ( ) ,
92
+ body. domain_names . clone ( ) ,
93
+ )
94
+ . await
95
+ . change_context ( api_error_response:: ApiErrorResponse :: InternalServerError ) ?;
96
+ services:: api:: ApplicationResponse :: Json ( ApplepayMerchantResponse {
97
+ status_code : "200" . to_string ( ) ,
98
+ status_message : "Applepay verification Completed" . to_string ( ) ,
99
+ } )
100
+ }
91
101
Err ( error) => {
92
102
logger:: error!( ?error) ;
93
103
services:: api:: ApplicationResponse :: Json ( ApplepayMerchantResponse {
@@ -98,6 +108,52 @@ pub async fn verify_merchant_creds_for_applepay(
98
108
} )
99
109
}
100
110
111
+ // Checks whether or not the domain verified is already present in db if not adds it
112
+ async fn check_existence_and_add_domain_to_db (
113
+ state : & AppState ,
114
+ business_profile_id : String ,
115
+ domain_from_req : Vec < String > ,
116
+ ) -> CustomResult < BusinessProfile , errors:: StorageError > {
117
+ let business_profile = state
118
+ . store
119
+ . find_business_profile_by_profile_id ( & business_profile_id)
120
+ . await ?;
121
+ let business_profile_to_update = business_profile. clone ( ) ;
122
+ let mut already_verified_domains = business_profile
123
+ . applepay_verified_domains
124
+ . unwrap_or_default ( ) ;
125
+
126
+ let mut new_verified_domains: Vec < String > = domain_from_req
127
+ . into_iter ( )
128
+ . filter ( |req_domain| !already_verified_domains. contains ( req_domain) )
129
+ . collect ( ) ;
130
+
131
+ already_verified_domains. append ( & mut new_verified_domains) ;
132
+
133
+ let update_business_profile = BusinessProfileUpdateInternal {
134
+ applepay_verified_domains : Some ( already_verified_domains) ,
135
+ profile_name : Some ( business_profile. profile_name ) ,
136
+ modified_at : Some ( business_profile. modified_at ) ,
137
+ return_url : business_profile. return_url ,
138
+ enable_payment_response_hash : Some ( business_profile. enable_payment_response_hash ) ,
139
+ payment_response_hash_key : business_profile. payment_response_hash_key ,
140
+ redirect_to_merchant_with_http_post : Some (
141
+ business_profile. redirect_to_merchant_with_http_post ,
142
+ ) ,
143
+ webhook_details : business_profile. webhook_details ,
144
+ metadata : business_profile. metadata ,
145
+ routing_algorithm : business_profile. routing_algorithm ,
146
+ intent_fulfillment_time : business_profile. intent_fulfillment_time ,
147
+ frm_routing_algorithm : business_profile. frm_routing_algorithm ,
148
+ payout_routing_algorithm : business_profile. payout_routing_algorithm ,
149
+ is_recon_enabled : Some ( business_profile. is_recon_enabled ) ,
150
+ } ;
151
+
152
+ state
153
+ . store
154
+ . update_business_profile_by_profile_id ( business_profile_to_update, update_business_profile)
155
+ . await
156
+ }
101
157
fn log_applepay_verification_response_if_error (
102
158
response : & Result < Result < types:: Response , types:: Response > , Report < errors:: ApiClientError > > ,
103
159
) {
0 commit comments