class FbGraph2::Auth::SignedRequest

Attributes

access_token[RW]
payload[RW]
user[RW]

Public Class Methods

new(token) click to toggle source
# File lib/fb_graph2/auth/signed_request.rb, line 10
def initialize(token)
  signature_str, @payload_str = token.split('.', 2)
  @signature = UrlSafeBase64.decode64 signature_str
  payload_json = UrlSafeBase64.decode64 @payload_str
  self.payload = MultiJson.load(payload_json).with_indifferent_access
rescue => e
  raise VerificationFailed.new 'Decode failed'
end

Public Instance Methods

verify!(client) click to toggle source
# File lib/fb_graph2/auth/signed_request.rb, line 19
def verify!(client)
  signature = OpenSSL::HMAC.digest OpenSSL::Digest::SHA256.new, client.secret, @payload_str
  raise VerificationFailed.new('Verification failed') unless @signature == signature
  instantiate client
end

Private Instance Methods

instantiate(client) click to toggle source
# File lib/fb_graph2/auth/signed_request.rb, line 27
def instantiate(client)
  if payload[:code].present?
    client.redirect_uri ||= ''
    client.authorization_code = payload[:code]
    self.access_token = client.access_token!
  else
    self.access_token = payload[:oauth_token]
  end
  self.user = User.new(payload[:user_id], payload[:user] || {}).authenticate(access_token)
  self
end