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