class LucidShopify::VerifyCallback
Constants
- Error
Public Instance Methods
call(params)
click to toggle source
Verify that the callback request originated from Shopify.
@param params [Hash] the request params
@raise [Error] if signature is invalid
# File lib/lucid_shopify/verify_callback.rb, line 18 def call(params) params = params.to_h.transform_keys(&:to_s) digest = OpenSSL::Digest::SHA256.new digest = OpenSSL::HMAC.hexdigest(digest, LucidShopify.config.shared_secret, encoded_params(params)) raise Error, 'invalid signature' unless digest == params['hmac'] end
Private Instance Methods
encode_key(chr)
click to toggle source
@param chr [String]
@return [String]
# File lib/lucid_shopify/verify_callback.rb, line 48 def encode_key(chr) {'%' => '%25', '&' => '%26', '=' => '%3D'}[chr] || chr end
encode_val(chr)
click to toggle source
@param chr [String]
@return [String]
# File lib/lucid_shopify/verify_callback.rb, line 57 def encode_val(chr) {'%' => '%25', '&' => '%26'}[chr] || chr end
encoded_params(params)
click to toggle source
@param params [Hash]
@return [String]
# File lib/lucid_shopify/verify_callback.rb, line 31 def encoded_params(params) params.reject do |k, _| k == 'hmac' end.map do |k, v| [].tap do |param| param << k.gsub(/./) { |c| encode_key(c) } param << '=' param << v.gsub(/./) { |c| encode_val(c) } end.join end.join('&') end