Module: PaystackGateway::Webhooks

Defined in:
lib/paystack_gateway/webhooks.rb

Overview

Webhooks

Defined Under Namespace

Classes: WebhookResponse

Constant Summary collapse

WEBHOOK_IPS =
%w[52.31.139.75 52.49.173.169 52.214.14.220].freeze
WEBHOOK_IP_ADDRESSES =
WEBHOOK_IPS.map { |addr| IPAddr.new(addr) }

Class Method Summary collapse

Class Method Details

.parse_webhook(parsed_body) ⇒ Object



17
18
19
# File 'lib/paystack_gateway/webhooks.rb', line 17

def self.parse_webhook(parsed_body)
  WebhookResponse.new(parsed_body.deep_symbolize_keys)
end

.valid_ip?(request_ip) ⇒ Boolean

Returns:

  • (Boolean)


30
# File 'lib/paystack_gateway/webhooks.rb', line 30

def self.valid_ip?(request_ip) = WEBHOOK_IP_ADDRESSES.any? { _1.include?(request_ip) }

.valid_webhook?(request_headers, request_body) ⇒ Boolean

Returns:

  • (Boolean)


22
23
24
25
26
27
28
# File 'lib/paystack_gateway/webhooks.rb', line 22

def self.valid_webhook?(request_headers, request_body)
  request_signature = request_headers['X-Paystack-Signature']
  return false if request_signature.blank?

  calculated_signature = OpenSSL::HMAC.hexdigest('SHA512', PaystackGateway.secret_key, request_body)
  ActiveSupport::SecurityUtils.secure_compare(request_signature, calculated_signature)
end