module Sinatra::Shopify::Methods
Public Instance Methods
after_shopify_auth()
click to toggle source
designed to be overridden
# File lib/sinatra/shopify-sinatra-app.rb, line 15 def after_shopify_auth end
shop_origin()
click to toggle source
for the app bridge initializer
# File lib/sinatra/shopify-sinatra-app.rb, line 19 def shop_origin "#{session[:shopify][:shop]}" end
shopify_session() { |shop_name| ... }
click to toggle source
# File lib/sinatra/shopify-sinatra-app.rb, line 23 def shopify_session(&blk) return_to = request.path return_params = request.params if no_session? authenticate(return_to, return_params) elsif different_shop? clear_session authenticate(return_to, return_params) else shop_name = session[:shopify][:shop] token = session[:shopify][:token] activate_shopify_api(shop_name, token) yield shop_name end rescue ActiveResource::UnauthorizedAccess clear_session shop = Shop.find_by(name: shop_name) shop.token = nil shop.save redirect request.path end
Private Instance Methods
activate_shopify_api(shop_name, token)
click to toggle source
# File lib/sinatra/shopify-sinatra-app.rb, line 81 def activate_shopify_api(shop_name, token) api_session = ShopifyAPI::Session.new(domain: shop_name, token: token, api_version: settings.api_version) ShopifyAPI::Base.activate_session(api_session) end
authenticate(return_to = '/', return_params = nil)
click to toggle source
# File lib/sinatra/shopify-sinatra-app.rb, line 53 def authenticate(return_to = '/', return_params = nil) session[:return_params] = return_params if return_params if shop_name = sanitized_shop_param(params) redirect "/login?shop=#{shop_name}" else redirect '/login' end end
base_url()
click to toggle source
# File lib/sinatra/shopify-sinatra-app.rb, line 63 def base_url request_protocol = request.secure? ? 'https' : 'http' "#{request_protocol}://#{request.env['HTTP_HOST']}" end
clear_session()
click to toggle source
# File lib/sinatra/shopify-sinatra-app.rb, line 76 def clear_session session.delete(:shopify) session.clear end
different_shop?()
click to toggle source
# File lib/sinatra/shopify-sinatra-app.rb, line 72 def different_shop? params[:shop].present? && session[:shopify][:shop] != sanitized_shop_param(params) end
no_session?()
click to toggle source
# File lib/sinatra/shopify-sinatra-app.rb, line 68 def no_session? !session.key?(:shopify) end
receive_webhook() { |shop_name, webhook_body| ... }
click to toggle source
# File lib/sinatra/shopify-sinatra-app.rb, line 86 def receive_webhook(&blk) return unless verify_shopify_webhook shop_name = request.env['HTTP_X_SHOPIFY_SHOP_DOMAIN'] webhook_body = ActiveSupport::JSON.decode(request.body.read.to_s) yield shop_name, webhook_body status 200 end
sanitized_shop_param(params)
click to toggle source
# File lib/sinatra/shopify-sinatra-app.rb, line 94 def sanitized_shop_param(params) return unless params[:shop].present? name = params[:shop].to_s.strip name += '.myshopify.com' if !name.include?('myshopify.com') && !name.include?('.') name.gsub!('https://', '') name.gsub!('http://', '') u = URI("http://#{name}") u.host.ends_with?('.myshopify.com') ? u.host : nil end
verify_shopify_webhook()
click to toggle source
# File lib/sinatra/shopify-sinatra-app.rb, line 105 def verify_shopify_webhook data = request.body.read.to_s digest = OpenSSL::Digest.new('sha256') calculated_hmac = Base64.encode64(OpenSSL::HMAC.digest(digest, settings.shared_secret, data)).strip request.body.rewind if calculated_hmac == request.env['HTTP_X_SHOPIFY_HMAC_SHA256'] true else puts 'Shopify Webhook verification failed!' false end end