Skip to content

Instantly share code, notes, and snippets.

@tikijian
Created August 24, 2014 17:53
Show Gist options
  • Save tikijian/9a503df20d12b76c5823 to your computer and use it in GitHub Desktop.
Save tikijian/9a503df20d12b76c5823 to your computer and use it in GitHub Desktop.
common controller from markee.ru
class Frontend::CommonController < ApplicationController
before_action :set_ig_user, except: [:auth, :login, :logout]
before_action :create_cart
# Set custom layout
layout 'frontend'
def index
@catalog_items = CatalogueItem.published.to_a
end
def info
@deliveries = Delivery.published.order(price: :asc).to_a
@payments = Payment.published.to_a
end
def auth
redirect_uri = IG_CALLBACK_URL
# provide back url if passed somewhere
redirect_uri += "?back_url=#{params[:back_url]}" if params[:back_url].present?
ig_response = Instagram.get_access_token(params[:code], :redirect_uri => redirect_uri)
session[:ig_access_token] = ig_response.access_token
cookies[:ig_access_token] = {value: session[:ig_access_token], expires: 30.days.from_now}
#redirect to back_url or root
if params[:back_url].present?
redirect_to params[:back_url]
else
redirect_to root_path
end
end
def login
if session[:ig_access_token].nil?
ig_authenticate_user!
else
redirect_to root_path
end
end
def logout
session.delete :ig_user_id
session.delete :ig_access_token if session[:ig_access_token].present?
cookies.delete :cart_id if cookies[:cart_id].present?
cookies.delete :ig_access_token if cookies[:ig_access_token].present?
redirect_to root_path
end
private
def ig_authenticate_user!
# authorize on instagram if not yet authorized
if session[:ig_access_token].nil?
return redirect_to Instagram.authorize_url(:redirect_uri => IG_CALLBACK_URL)
end
@ig_user = Instagram.client(:access_token => session[:ig_access_token])
end
def set_ig_user
access_token = session[:ig_access_token] || cookies[:ig_access_token]
if access_token.nil?
@ig_user = nil
else
@ig_user = Instagram.client(:access_token => access_token)
# fetch instagram user info
begin
@current_user = @ig_user.user
# set user_id for future uses
session[:ig_user_id] = @current_user.id unless session[:id_user_id].present?
rescue Instagram::BadRequest => e
# if we have message 'invalid access_token' then re-authorize user
if e.message.match(/access_token/)
return redirect_to Instagram.authorize_url(:redirect_uri => IG_CALLBACK_URL)
end
end
end
end
def create_cart
if session[:ig_user_id].present?
@cart = Cart.find_or_create_by(ig_user_id: session[:ig_user_id])
else
@cart = Cart.find_or_create_by(id: session[:cart_id])
session[:cart_id] = @cart.id unless session[:cart_id].present?
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment