class MessageBird::SignedRequest
Public Class Methods
new(query_parameters, signature, request_timestamp, body)
click to toggle source
# File lib/messagebird/signed_request.rb, line 12 def initialize(query_parameters, signature, request_timestamp, body) unless query_parameters.is_a? Hash raise ValidationException, 'The "query_parameters" value is invalid.' end unless signature.is_a? String raise ValidationException, 'The "signature" value is invalid.' end unless request_timestamp.is_a? Integer raise ValidationException, 'The "request_timestamp" value is invalid.' end unless body.is_a? String raise ValidationException, 'The "body" value is invalid.' end @query_parameters = query_parameters @signature = signature @request_timestamp = request_timestamp @body = body end
Public Instance Methods
build_payload()
click to toggle source
# File lib/messagebird/signed_request.rb, line 38 def build_payload parts = [] parts.push(@request_timestamp) parts.push(URI.encode_www_form(@query_parameters.sort)) parts.push(Digest::SHA256.new.digest(@body)) parts.join("\n") end
recent?(offset = 10)
click to toggle source
# File lib/messagebird/signed_request.rb, line 46 def recent?(offset = 10) (Time.now.getutc.to_i - @request_timestamp) < offset end
verify(signing_key)
click to toggle source
# File lib/messagebird/signed_request.rb, line 32 def verify(signing_key) calculated_signature = OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha256'), signing_key, build_payload) expected_signature = Base64.decode64(@signature) calculated_signature.bytes == expected_signature.bytes end