class Adyen::AdyenError
def initialize(request = nil, response = nil, msg = nil, code = nil)
def initialize(request = nil, response = nil, msg = nil, code = nil) unless request.nil? request = request.is_a?(Hash) ? request : JSON.parse(request, symbolize_names: true) mask_fields(request) end # components of formatted error message attributes = { code: code, msg: msg, request: request, response: response }.select { |_k, v| v }.map { |k, v| "#{k}:#{v}" }.join(', ') message = "#{self.class.name} #{attributes}" super(message) # internal variables @code = code @response = response @request = request @msg = msg end
def mask_fields(request)
def mask_fields(request) return if request.nil? # sensitive fields fields_to_mask = %i[ expiryMonth expiryYear encryptedCardNumber encryptedExpiryMonth encryptedExpiryYear encryptedSecurityCode ] # convert to hash if necessary request = request.is_a?(Hash) ? request : JSON.parse(request, symbolize_names: true) # iterate through request to find fields to mask request.each do |k, v| if request[k].is_a?(Hash) # recursively traverse multi-level hashes mask_fields(request[k]) elsif k == :number request[k] = "#{v[0, 6]}******#{v[12, 16]}" # show first 6 and last 4 for cards elsif k == :cvc # show length of cvc for debugging request[k] = '*' * v.length elsif fields_to_mask.include? k # generic mask for other fields request[k] = '***' end end end