Sha256: 5d3abfba5e657d5bfe187906b486b06ce06aebc4ef63ed2051908b6ead79e0ca

Contents?: true

Size: 1.52 KB

Versions: 2

Compression:

Stored size: 1.52 KB

Contents

module Monri
  class ValidateCallback

    # @return [Monri::Config]
    attr_accessor :config

    # @param [String] header
    # @param [String] body
    # @param [Hash] options
    # @return [Hash{Symbol->String | TrueClass | FalseClass}]
    def validate(header, body, options = {})

      unless header.is_a?(String)
        raise Monri::Errors::InvalidArgumentsError.new('First parameter - authorization header, should be a String')
      end

      unless body.is_a?(String)
        raise Monri::Errors::InvalidArgumentsError.new('Second parameter - body, should be a String')
      end

      unless options.is_a?(Hash)
        raise Monri::Errors::InvalidArgumentsError.new('Third parameter - options, should be a Hash')
      end

      version = options.delete(:version) || '2'

      if version == 'v2'
        expected_digest = Digest::SHA512.hexdigest("#{config.merchant_key}#{body}")
      elsif version == '1'
        unless options.has_key?(:order_number)
          raise Monri::Errors::InvalidArgumentsError.new('For version=1 provide order-number')
        end
        order_number = options.delete(:order_number)
        expected_digest = Digest::SHA1.hexdigest("#{config.merchant_key}#{order_number}")
      else
        raise Monri::Errors::InvalidArgumentsError.new("Version option, value='#{version}' is not supported")
      end

      expected_header = "WP3-callback #{expected_digest}"
      {
        header: header,
        expected_header: expected_header,
        valid: header == expected_header
      }
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
monri-0.3.0 lib/monri/validate_callback.rb
monri-0.2.0 lib/monri/validate_callback.rb