class Ebay::NotificationApi::Verifier::MessageValidator
Constants
- ALGORITHM
- DIGEST
- KEY_PATTERN_END
- KEY_PATTERN_START
- PUBLIC_KEY_ENDPOINT
Public Class Methods
new(message, signature_header)
click to toggle source
# File lib/ebay/notification_api/verifier/message_validator.rb, line 9 def initialize(message, signature_header) @signature_header = signature_header @message = message end
Public Instance Methods
valid_message?()
click to toggle source
# File lib/ebay/notification_api/verifier/message_validator.rb, line 14 def valid_message? verifier = OpenSSL::PKey::EC.new(format_key(public_key_response["key"])) signature_base64 = Base64.decode64(signature_json["signature"]) verifier.verify(OpenSSL::Digest.new(DIGEST), signature_base64, @message.to_json) end
Private Instance Methods
format_key(key)
click to toggle source
# File lib/ebay/notification_api/verifier/message_validator.rb, line 43 def format_key(key) key.sub(KEY_PATTERN_START, "#{KEY_PATTERN_START}\n") .sub(KEY_PATTERN_END, "\n#{KEY_PATTERN_END}") end
public_key_response()
click to toggle source
# File lib/ebay/notification_api/verifier/message_validator.rb, line 26 def public_key_response @public_key_response ||= begin token = Ebay::NotificationApi::Verifier.application_token headers = {"Authorization" => "Bearer #{token}"} public_key_url = "#{PUBLIC_KEY_ENDPOINT}#{signature_json["kid"]}" HTTParty.get(public_key_url, headers: headers).tap do |response| next if response["algorithm"] == ALGORITHM && response["digest"] == DIGEST raise WrongAlgorithm end end end
signature_json()
click to toggle source
# File lib/ebay/notification_api/verifier/message_validator.rb, line 48 def signature_json @signature_json ||= JSON.parse(Base64.decode64(@signature_header)) end