Sha256: 95507bcf24d2bcbca6cfd5e36097acb502b0e28c483e84cc9d0dde6633736e33

Contents?: true

Size: 1.52 KB

Versions: 3

Compression:

Stored size: 1.52 KB

Contents

require 'rest_client'
require 'json'

module FreeboxApi

  class Freebox < Hash

    def initialize(hash = {})
      self[:freebox_ip] = hash[:freebox_ip] ? hash[:freebox_ip] : 'mafreebox.free.fr'
      self[:freebox_port] = hash[:freebox_port] ? hash[:freebox_port] : '80'
      @client = RestClient::Resource.new("http://#{self[:freebox_ip]}:#{self[:freebox_port]}")
      self[:uid] = discover['uid']
      self[:device_name] = discover['device_name']
      self[:api_version] = discover['api_version']
      self[:api_base_url] = discover['api_base_url']
      self[:device_type] = discover['device_type']
    end

    def discover
      args = ['get']
      @discover ||= JSON.parse(@client['/api_version'].send(*args))
    end

    def build_url(api_url)
      "#{self[:api_base_url]}v#{self[:api_version].split('.')[0]}#{api_url}"
    end

    def authorize(token_request)
      http_call('post', '/login/authorize/', token_request)
    end

    def track_auth(track_id)
      http_call('get', "/login/authorize/#{track_id}")
    end

    def challenge
      http_call('get', '/login/')['challenge']
    end

    def http_call(http_method, path, params = {}, session = nil)
      headers = {}

      args = [http_method]
      if %w[post put].include?(http_method.to_s)
        args << params.to_json
      else
        headers[:params] = params if params
      end
      headers[:'X_Fbx_App_Auth'] = session.session_token if session
      args << headers if headers
      JSON.parse(@client[build_url(path)].send(*args))['result']
    end

  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
freebox_api-0.1.1 lib/freebox_api/freebox.rb
freebox_api-0.1.0 lib/freebox_api/freebox.rb
freebox_api-0.0.2 lib/freebox_api/freebox.rb