Sha256: d3c91aacb2f4bb017e1209542de4838db8947eec487fe25b30b7fe8e96625e8d

Contents?: true

Size: 1.54 KB

Versions: 4

Compression:

Stored size: 1.54 KB

Contents

# frozen_string_literal: true

module ApiUserAuth
  module Providers
    # Get info from Facebook token
    class Facebook
      API_PATH = 'https://graph.facebook.com/v3.0/me'.freeze
      FIELDS = %w[id name email birthday hometown gender picture].freeze

      def initialize(token)
        @token = token
        @data = {}
      end

      def api_info_url
        params = {
          access_token: @token,
          fields: FIELDS.join(','),
          format: 'json'
        }
        URI("#{API_PATH}?#{params.to_query}")
      end

      def get_user_data
        api_get_request
        user_data
      end

      def user_data
        {
          id: @data[:id], name: @data[:name],
          email: @data[:email] || "#{@data[:id]}@facebook.com",
          provider: 'facebook',
          img_url: (@data[:picture] || {}).try(:[], :data).try(:[], :url),
          info: {
            birthday: @data[:birthday],
            city: (@data[:hometown] || {}).try(:[], :name),
            gender: @data[:gender]
          }
        }
      end

      def self.get_user(token)
        fb = Facebook.new(token)
        fb.get_user_data
      end

      private

      def api_get_request
        response = ::Net::HTTP.get_response(api_info_url)
        case response.code.to_i
        when 200
          @data = JSON.parse(response.body, symbolize_names: true)
        when 400
          raise ApiUserAuth::Exceptions::InvalidToken, 'Invalid Token'
        else
          raise ApiUserAuth::Exceptions::ProviderError, 'Provider Error'
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
api_user_auth-0.1.9 lib/api_user_auth/providers/facebook.rb
api_user_auth-0.1.8 lib/api_user_auth/providers/facebook.rb
api_user_auth-0.1.7 lib/api_user_auth/providers/facebook.rb
api_user_auth-0.1.6 lib/api_user_auth/providers/facebook.rb