Sha256: 82ece52cc0308455abfd7c5e79fd1d586f5ea9a618f9145021a5d5a4dd8e40a4

Contents?: true

Size: 1.56 KB

Versions: 16

Compression:

Stored size: 1.56 KB

Contents

# typed: strict
# frozen_string_literal: true

module ShopifyAPI
  module Webhooks
    class Request
      extend T::Sig
      include Utils::VerifiableQuery

      sig { override.returns(String) }
      def hmac
        Digest.hexencode(Base64.decode64(T.cast(@headers["x-shopify-hmac-sha256"], String)))
      end

      sig { returns(String) }
      def topic
        T.cast(@headers["x-shopify-topic"], String)
      end

      sig { returns(String) }
      def shop
        T.cast(@headers["x-shopify-shop-domain"], String)
      end

      sig { override.returns(String) }
      def to_signable_string
        @raw_body
      end

      sig { returns(T::Hash[String, T.untyped]) }
      def parsed_body
        JSON.parse(@raw_body)
      end

      sig { params(raw_body: String, headers: T::Hash[String, T.untyped]).void }
      def initialize(raw_body:, headers:)
        # normalize the headers by forcing lowercase, removing any prepended "http"s, and changing underscores to dashes
        headers = headers.to_h { |k, v| [k.to_s.downcase.sub("http_", "").gsub("_", "-"), v] }

        missing_headers = []
        [
          "x-shopify-topic",
          "x-shopify-hmac-sha256",
          "x-shopify-shop-domain",
        ].each { |header| missing_headers << header unless headers.include?(header) }
        unless missing_headers.empty?
          raise Errors::InvalidWebhookError,
            "Missing one or more of the required HTTP headers to process webhooks: #{missing_headers}"
        end

        @headers = headers
        @raw_body = raw_body
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
shopify_api-13.4.0 lib/shopify_api/webhooks/request.rb
shopify_api-13.3.1 lib/shopify_api/webhooks/request.rb
shopify_api-13.3.0 lib/shopify_api/webhooks/request.rb
shopify_api-13.2.0 lib/shopify_api/webhooks/request.rb
shopify_api-13.1.0 lib/shopify_api/webhooks/request.rb
shopify_api-13.0.0 lib/shopify_api/webhooks/request.rb
shopify_api-12.5.0 lib/shopify_api/webhooks/request.rb
shopify_api-12.4.0 lib/shopify_api/webhooks/request.rb
shopify_api-12.3.0 lib/shopify_api/webhooks/request.rb
shopify_api-12.2.1 lib/shopify_api/webhooks/request.rb
shopify_api-12.2.0 lib/shopify_api/webhooks/request.rb
shopify_api-12.1.0 lib/shopify_api/webhooks/request.rb
shopify_api-12.0.0 lib/shopify_api/webhooks/request.rb
shopify_api-11.1.0 lib/shopify_api/webhooks/request.rb
shopify_api-11.0.1 lib/shopify_api/webhooks/request.rb
shopify_api-11.0.0 lib/shopify_api/webhooks/request.rb