Module: PlataformaSocial::Facebook

Included in:
ActionController::Base
Defined in:
lib/plataforma_social/facebook.rb

Instance Method Summary collapse

Instance Method Details

#facebook_loginObject



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/plataforma_social/facebook.rb', line 6

def 
  load_oauth
  load_graph
  
  redirect = false
  
  if params[:code]
    begin
      @oauth.get_access_token(params[:code])
    rescue Koala::Facebook::OAuthTokenRequestError
      redirect = true if parse_facebook_signed_request && !parse_facebook_signed_request['oauth_token']
    end
  else
    redirect = true if parse_facebook_signed_request && !parse_facebook_signed_request['oauth_token']
  end
  
  if parse_facebook_signed_request && parse_facebook_signed_request['oauth_token']
    if !session[:not_verify_facebook_permissions] === true
      permissions = @graph.get_object('me', :fields => 'permissions')['permissions']['data'][0]
      session[:not_verify_facebook_permissions] = true
    
      PlataformaSocial.facebook_scope.split(',').each do |permission|
        redirect = true unless permissions[permission.strip]
      end
    end
  end
  
  render :text => %|<script type="text/javascript">window.top.location.href="#{@oauth.url_for_oauth_code(:permissions => PlataformaSocial.configuration.facebook_scope)}";</script>| if redirect
end

#facebook_user_dataObject



61
62
63
64
65
# File 'lib/plataforma_social/facebook.rb', line 61

def facebook_user_data
  if load_graph
    @graph.get_object('me')
  end
end

#load_graphObject



85
86
87
# File 'lib/plataforma_social/facebook.rb', line 85

def load_graph
  @graph = Koala::Facebook::API.new parse_facebook_signed_request['oauth_token'] if parse_facebook_signed_request.present? && parse_facebook_signed_request['oauth_token']
end

#load_oauthObject



72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/plataforma_social/facebook.rb', line 72

def load_oauth
  uri = URI.parse(PlataformaSocial.facebook_callback_url.to_s)
  
  callback_url = if uri && uri.scheme.present?
    uri.query = [uri.query, "gm_referral_code=#{params[:gm_referral_code]}", "source=#{params[:source]}"].compact.join('&')
    uri.to_s
  else
    nil
  end
  
  @oauth = Koala::Facebook::OAuth.new(PlataformaSocial.facebook_app_id, PlataformaSocial.facebook_app_secret, callback_url)
end

#load_user_data(options = {}) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/plataforma_social/facebook.rb', line 36

def load_user_data options = {}
  settings = {
    referral_code: params[:gm_referral_code],
    source: params[:source],
    referrer: request.referer,
    signed_request: params[:signed_request]
  }.merge options
  
  facebook_data          = facebook_user_data.try(:symbolize_keys)
  plataforma_social_data = plataforma_social_user_data(settings).try(:symbolize_keys)
  
  @user_data = { :facebook => facebook_data, :plataforma_social => plataforma_social_data }
end

#parse_facebook_signed_requestObject



67
68
69
70
# File 'lib/plataforma_social/facebook.rb', line 67

def parse_facebook_signed_request
  load_oauth
  @oauth.parse_signed_request params[:signed_request] if params[:signed_request].present?
end

#plataforma_social_user_data(settings = {}) ⇒ Object



50
51
52
53
54
55
56
57
58
59
# File 'lib/plataforma_social/facebook.rb', line 50

def plataforma_social_user_data settings = {}
  if settings[:signed_request]
    response = Request.post("#{PlataformaSocial.domains('login')}/register", settings)
    
    data = {}
    data[:reference] = response['id'] if response.present? && response['id']
    
    data
  end
end