class Adyen::Utils::HmacValidator
Constants
- DATA_SEPARATOR
- HMAC_ALGORITHM
- NOTIFICATION_VALIDATION_KEYS
Public Instance Methods
calculate_notification_hmac(notification_request_item, hmac_key)
click to toggle source
# File lib/adyen/utils/hmac_validator.rb, line 18 def calculate_notification_hmac(notification_request_item, hmac_key) data = data_to_sign(notification_request_item) Base64.strict_encode64(OpenSSL::HMAC.digest(HMAC_ALGORITHM, [hmac_key].pack('H*'), data)) end
data_to_sign(notification_request_item)
click to toggle source
# File lib/adyen/utils/hmac_validator.rb, line 24 def data_to_sign(notification_request_item) NOTIFICATION_VALIDATION_KEYS.map { |key| fetch(notification_request_item, key).to_s } .map { |value| value.gsub('\\', '\\\\').gsub(':', '\\:') } .join(DATA_SEPARATOR) end
valid_notification_hmac?(notification_request_item, hmac_key)
click to toggle source
# File lib/adyen/utils/hmac_validator.rb, line 11 def valid_notification_hmac?(notification_request_item, hmac_key) expected_sign = calculate_notification_hmac(notification_request_item, hmac_key) merchant_sign = fetch(notification_request_item, 'additionalData.hmacSignature') expected_sign == merchant_sign end
Private Instance Methods
fetch(hash, keys)
click to toggle source
# File lib/adyen/utils/hmac_validator.rb, line 32 def fetch(hash, keys) value = hash keys.to_s.split('.').each do |key| value = if key.to_i.to_s == key value[key.to_i] else value[key].nil? ? value[key.to_sym] : value[key] end break if value.nil? end value end