Sha256: 3e61199c19582976cc17fe50affd4be05b3b5929668c79d9b967802db56a2ff4

Contents?: true

Size: 1.28 KB

Versions: 2

Compression:

Stored size: 1.28 KB

Contents

require 'linkedin-id-token'
require 'active_support/core_ext/module/delegation'

module LinkedinSignIn
  class Identity
    class ValidationError < StandardError; end

    def initialize(token)
      set_extracted_payload(token)
    end

    def user_id
      @payload["id"]
    end

    def first_name
      @payload["firstName"]
    end

    def last_name
      @payload["lastName"]
    end

    def email_address
      @payload["emailAddress"]
    end

    def avatar_url
      @payload["pictureUrl"]
    end

    def current_company_name
      positions = @payload["positions"]["values"]
      current_position = positions.find { |position| position["isCurrent"] }
      current_position["company"]["name"]
    end

    private
      def set_extracted_payload(token)
        uri = URI("https://api.linkedin.com/v1/people/~:(id,firstName,lastName,picture-url,email-address,positions)?format=json")
        request = Net::HTTP::Get.new uri
        request['Authorization'] = "Bearer #{token}"
        response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
          http.request(request)
        end

        case response
        when Net::HTTPSuccess
          @payload = JSON(response.body)
        else
          raise ValidationError, response.body
        end
      end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
linkedin_sign_in-0.3.1 lib/linkedin_sign_in/identity.rb
linkedin_sign_in-0.3 lib/linkedin_sign_in/identity.rb