class PlaylyfeClient::Connection

based on playlyfe-rub-sdk (github.com/playlyfe/playlyfe-ruby-sdk)

Attributes

sdk_version[R]

Public Class Methods

createJWT(options) click to toggle source
# File lib/playlyfe_client/connection.rb, line 14
def self.createJWT(options)
  options[:scopes] ||= []
  options[:expires] ||= 3600
  expires = Time.now.to_i + options[:expires]
  token = JWT.encode({:player_id => options[:player_id], :scopes => options[:scopes], :exp => expires}, options[:client_secret], 'HS256')
  token = "#{options[:client_id]}:#{token}"
  return token
end
new(options = {}) click to toggle source
# File lib/playlyfe_client/connection.rb, line 23
def initialize(options = {})
  if options[:type].nil?
    err = PlaylyfeClient::ConnectionError.new("")
    err.name = 'init_failed'
    err.message = "You must pass in a type whether 'client' for client credentials flow or 'code' for auth code flow"
    raise err
  end
  @version = options[:version] ||= 'v2'
  @type = options[:type]
  @id = options[:client_id]
  @secret = options[:client_secret]
  @store = options[:store]
  @load = options[:load]
  @redirect_uri = options[:redirect_uri]
  @skip_api_calls_limit_exceeded_error=options[:skip_api_calls_limit_exceeded_error] || false
  if @store.nil?
    @store = lambda { |token| puts 'Storing Token' }
  end
  if @type == 'client'
    get_access_token()
  else
    if options[:redirect_uri].nil?
      err = PlaylyfeClient::ConnectionError.new("")
      err.name = 'init_failed'
      err.message = 'You must pass in a redirect_uri for the auth code flow'
      raise err
    end
  end
end

Public Instance Methods

api(method, route, query = {}, body = {}, raw = false) click to toggle source
# File lib/playlyfe_client/connection.rb, line 121
def api(method, route, query = {}, body = {}, raw = false)
  query = check_token(query)
  begin
    uri="https://api.playlyfe.com/#{@version}#{route}?#{query}"
    puts "doing real query to api.uri : #{uri} with body #{body.to_json}" 
    response = RestClient::Request.execute(
      :method => method,
      :url => uri,
      :headers => {
        :content_type => :json,
        :accepts => :json
      },
      :payload => body.to_json,
      :ssl_version => 'SSLv23'
    )

    if raw == true
      return response.body
    else
      if response.body == 'null'
        return nil
      else
        return JSON.parse(response.body)#, symbolize_names: true)
      end
    end
  rescue => e
    raise PlaylyfeClient::Error.build(e.response, "#{method} #{uri}")
  end
end
api_version() click to toggle source
# File lib/playlyfe_client/connection.rb, line 53
def api_version
  @version
end
check_token(query) click to toggle source
# File lib/playlyfe_client/connection.rb, line 110
def check_token(query)
  access_token = @load.call
  if access_token['expires_at'] < Time.now.to_i
    puts 'Access Token Expired'
    get_access_token()
    access_token = @load.call
  end
  query[:access_token] = access_token['access_token']
  query = hash_to_query(query)
end
delete(route, query = {}) click to toggle source
# File lib/playlyfe_client/connection.rb, line 171
def delete(route, query = {})
  api(:delete, route, query, {}, false)
end
exchange_code(code) click to toggle source
# File lib/playlyfe_client/connection.rb, line 188
def exchange_code(code)
  if code.nil?
    err = PlaylyfeClient::ConnectionError.new("")
    err.name = 'init_failed'
    err.message = 'You must pass in a code in exchange_code for the auth code flow'
    raise err
  else
    @code = code
    get_access_token()
  end
end
game() click to toggle source
# File lib/playlyfe_client/connection.rb, line 57
def game
  fail PlaylyfeClient::GameError.new("{\"error\": \"unsupported version of API\", \"error_description\": \"'#{self.api_version}' of API is unsupported by playlyfe_client\"}")
end
get(route, query = {}) click to toggle source
# File lib/playlyfe_client/connection.rb, line 151
def get(route, query = {})
  api(:get, route, query, {}, false)
end
get_access_token() click to toggle source
# File lib/playlyfe_client/connection.rb, line 61
def get_access_token
  begin
    if @type == 'client'
      access_token = RestClient::Request.execute(:method => :post, :url => 'https://playlyfe.com/auth/token',
        :payload => {
          :client_id => @id,
          :client_secret => @secret,
          :grant_type => 'client_credentials'
        }.to_json,
        :headers => {
          :content_type => :json,
          :accepts => :json
        },
        :ssl_version => 'SSLv23'
      )
    else
      access_token = RestClient::Request.execute(:method => :post, :url => "https://playlyfe.com/auth/token",
        :payload => {
          :client_id => @id,
          :client_secret => @secret,
          :grant_type => 'authorization_code',
          :code => @code,
          :redirect_uri => @redirect_uri
        }.to_json,
        :headers => {
          :content_type => :json,
          :accepts => :json
        },
        :ssl_version => 'SSLv23'
      )
    end
    access_token = JSON.parse(access_token)
    expires_at ||= Time.now.to_i + access_token['expires_in']
    access_token.delete('expires_in')
    access_token['expires_at'] = expires_at
    @store.call access_token
    if @load.nil?
      @load = lambda { return access_token }
    else
      old_token = @load.call
      if access_token != old_token
        @load = lambda { return access_token }
      end
    end
  rescue => e
    raise PlaylyfeClient::ConnectionError.new(e.response)
  end
end
get_login_url() click to toggle source
# File lib/playlyfe_client/connection.rb, line 179
def get_login_url
  query = { response_type: 'code', redirect_uri: @redirect_uri, client_id: @id }
  "https://playlyfe.com/auth?#{hash_to_query(query)}"
end
get_logout_url() click to toggle source
# File lib/playlyfe_client/connection.rb, line 184
def get_logout_url
  ""
end
get_raw(route, query = {}) click to toggle source
# File lib/playlyfe_client/connection.rb, line 155
def get_raw(route, query = {})
  api(:get, route, query, {}, true)
end
hash_to_query(hash) click to toggle source
# File lib/playlyfe_client/connection.rb, line 175
def hash_to_query(hash)
  return URI.encode(hash.map{|k,v| "#{k}=#{v}"}.join("&"))
end
patch(route, query = {}, body = {}) click to toggle source
# File lib/playlyfe_client/connection.rb, line 167
def patch(route, query = {}, body = {})
  api(:patch, route, query, body, false)
end
post(route, query = {}, body = {}) click to toggle source
# File lib/playlyfe_client/connection.rb, line 159
def post(route, query = {}, body = {})
  api(:post, route, query, body, false)
end
put(route, query = {}, body = {}) click to toggle source
# File lib/playlyfe_client/connection.rb, line 163
def put(route, query = {}, body = {})
  api(:put, route, query, body, false)
end