Class: Adyen::Utils::HmacValidator
- Inherits:
-
Object
- Object
- Adyen::Utils::HmacValidator
- Defined in:
- lib/adyen/utils/hmac_validator.rb
Constant Summary collapse
- HMAC_ALGORITHM =
'sha256'.freeze
- DATA_SEPARATOR =
':'.freeze
- WEBHOOK_VALIDATION_KEYS =
%w[ pspReference originalReference merchantAccountCode merchantReference amount.value amount.currency eventCode success ].freeze
Instance Method Summary collapse
- #calculate_webhook_hmac(webhook_request_item, hmac_key) ⇒ Object
- #data_to_sign(webhook_request_item) ⇒ Object
- #valid_webhook_hmac?(webhook_request_item, hmac_key) ⇒ Boolean
Instance Method Details
#calculate_webhook_hmac(webhook_request_item, hmac_key) ⇒ Object
18 19 20 21 22 |
# File 'lib/adyen/utils/hmac_validator.rb', line 18 def calculate_webhook_hmac(webhook_request_item, hmac_key) data = data_to_sign(webhook_request_item) Base64.strict_encode64(OpenSSL::HMAC.digest(HMAC_ALGORITHM, [hmac_key].pack('H*'), data)) end |
#data_to_sign(webhook_request_item) ⇒ Object
25 26 27 28 |
# File 'lib/adyen/utils/hmac_validator.rb', line 25 def data_to_sign(webhook_request_item) data = WEBHOOK_VALIDATION_KEYS.map { |key| fetch(webhook_request_item, key).to_s } .join(DATA_SEPARATOR) end |
#valid_webhook_hmac?(webhook_request_item, hmac_key) ⇒ Boolean
11 12 13 14 15 16 |
# File 'lib/adyen/utils/hmac_validator.rb', line 11 def valid_webhook_hmac?(webhook_request_item, hmac_key) expected_sign = calculate_webhook_hmac(webhook_request_item, hmac_key) merchant_sign = fetch(webhook_request_item, 'additionalData.hmacSignature') expected_sign == merchant_sign end |