three_d_secure_repo.rb

 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