lib/onfido/resources/webhook.rb in onfido-0.4.0 vs lib/onfido/resources/webhook.rb in onfido-0.5.0
- old
+ new
@@ -12,7 +12,25 @@
end
def all(page: 1, per_page: 20)
get(url: url_for("webhooks?page=#{page}&per_page=#{per_page}"))
end
+
+ # As well as being a normal resource, Onfido::Webhook also supports
+ # verifying the authenticity of a webhook by comparing the signature on the
+ # request to one computed from the body
+ def self.valid?(request_body, request_signature, token)
+ if [request_body, request_signature, token].any?(&:nil?)
+ raise ArgumentError, "A request body, request signature and token " \
+ "must be provided"
+ end
+
+ computed_signature = generate_signature(request_body, token)
+ Rack::Utils.secure_compare(request_signature, computed_signature)
+ end
+
+ def self.generate_signature(request_body, token)
+ OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha1'), token, request_body)
+ end
+ private_class_method :generate_signature
end
end