module Sinatra::Shopify
Public Class Methods
registered(app)
click to toggle source
# File lib/sinatra/shopify-sinatra-app.rb, line 157 def self.registered(app) app.helpers Shopify::Methods app.register Sinatra::ActiveRecordExtension app.set :database_file, File.expand_path('config/database.yml') app.set :views, File.expand_path('views') app.set :public_folder, File.expand_path('public') app.set :erb, layout: :'layouts/application' app.set :protection, except: :frame_options app.enable :sessions app.enable :inline_templates app.set :scope, 'read_products, read_orders' app.set :api_key, ENV['SHOPIFY_API_KEY'] app.set :shared_secret, ENV['SHOPIFY_SHARED_SECRET'] app.set :secret, ENV['SECRET'] app.use Rack::Flash, sweep: true app.use Rack::MethodOverride app.use Rack::Session::Cookie, key: 'rack.session', path: '/', secret: app.settings.secret, expire_after: 60 * 30 # half an hour in seconds app.use OmniAuth::Builder do provider :shopify, app.settings.api_key, app.settings.shared_secret, scope: app.settings.scope, setup: lambda { |env| params = Rack::Utils.parse_query(env['QUERY_STRING']) site_url = "https://#{params['shop']}" env['omniauth.strategy'].options[:client_options][:site] = site_url } end ShopifyAPI::Session.setup( api_key: app.settings.api_key, secret: app.settings.shared_secret ) app.get '/install' do if params[:shop].present? authenticate else erb :install, layout: false end end app.post '/login' do authenticate end app.get '/logout' do logout redirect '/install' end app.get '/auth/shopify/callback' do shop_name = params['shop'] token = request.env['omniauth.auth']['credentials']['token'] shop = Shop.find_or_initialize_by(name: shop_name) shop.token = token shop.save! session[:shopify] = { shop: shop_name, token: token } after_shopify_auth() return_to = env['omniauth.params']['return_to'] return_params = session[:return_params] session.delete(:return_params) return_to += "?#{return_params.to_query}" if return_params.present? redirect return_to end app.get '/auth/failure' do erb "<h1>Authentication Failed:</h1> <h3>message:<h3> <pre>#{params}</pre>", layout: false end end