Created
August 24, 2014 17:53
-
-
Save tikijian/9a503df20d12b76c5823 to your computer and use it in GitHub Desktop.
common controller from markee.ru
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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