Sha256: fa9724549d3c6b753ddfe1516007e11a80d28cf40a31e6deb49a9c1131310f18

Contents?: true

Size: 1.36 KB

Versions: 10

Compression:

Stored size: 1.36 KB

Contents

# typed: strict
# frozen_string_literal: true

module ShopifyAPI
  module Utils
    module HmacValidator
      extend T::Sig

      class << self
        extend T::Sig

        sig { params(verifiable_query: VerifiableQuery).returns(T::Boolean) }
        def validate(verifiable_query)
          return false unless verifiable_query.hmac

          result = validate_signature(verifiable_query, Context.api_secret_key)
          if result || Context.old_api_secret_key.nil? || T.must(Context.old_api_secret_key).empty?
            result
          else
            validate_signature(verifiable_query, T.must(Context.old_api_secret_key))
          end
        end

        private

        sig { params(verifiable_query: VerifiableQuery, secret: String).returns(T::Boolean) }
        def validate_signature(verifiable_query, secret)
          received_signature = verifiable_query.hmac
          computed_signature = compute_signature(verifiable_query.to_signable_string, secret)
          OpenSSL.secure_compare(computed_signature, T.must(received_signature))
        end

        sig { params(signable_string: String, secret: String).returns(String) }
        def compute_signature(signable_string, secret)
          OpenSSL::HMAC.hexdigest(
            OpenSSL::Digest.new("sha256"),
            secret,
            signable_string,
          )
        end
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
shopify_api-14.8.0 lib/shopify_api/utils/hmac_validator.rb
shopify_api-14.7.0 lib/shopify_api/utils/hmac_validator.rb
shopify_api-14.6.0 lib/shopify_api/utils/hmac_validator.rb
shopify_api-14.5.0 lib/shopify_api/utils/hmac_validator.rb
shopify_api-14.4.0 lib/shopify_api/utils/hmac_validator.rb
shopify_api-14.3.0 lib/shopify_api/utils/hmac_validator.rb
shopify_api-14.2.0 lib/shopify_api/utils/hmac_validator.rb
shopify_api-14.1.0 lib/shopify_api/utils/hmac_validator.rb
shopify_api-14.0.1 lib/shopify_api/utils/hmac_validator.rb
shopify_api-14.0.0 lib/shopify_api/utils/hmac_validator.rb