1# frozen_string_literal: true
2
3class ThreeDSecureRepo
4 class Failed < StandardError; end
5
6 def put_from_result(result)
7 three_d = if result.payment_method
8 return unless result.payment_method.verification # Already vaulted
9
10 result.payment_method.verification.three_d_secure_info
11 else
12 result.transaction.three_d_secure_info
13 end
14
15 if !three_d ||
16 (three_d.liability_shift_possible && !three_d.liability_shifted)
17 raise Failed, method_token(result)
18 end
19 end
20
21 def method_token(result)
22 if result.payment_method
23 result.payment_method.token
24 else
25 result.transaction.credit_card_details.token
26 end
27 end
28end