Class: FreeboxApi::Freebox

Inherits:
Hash
  • Object
show all
Defined in:
lib/freebox_api/freebox.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(hash = {}, logger = nil) ⇒ Freebox

Returns a new instance of Freebox.



11
12
13
14
15
16
17
18
19
20
21
# File 'lib/freebox_api/freebox.rb', line 11

def initialize(hash = {}, logger = nil)
  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']
  self.logger = logger
end

Instance Attribute Details

#loggerObject

Returns the value of attribute logger.



9
10
11
# File 'lib/freebox_api/freebox.rb', line 9

def logger
  @logger
end

Instance Method Details

#authorize(token_request) ⇒ Object



40
41
42
# File 'lib/freebox_api/freebox.rb', line 40

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

#build_url(api_url) ⇒ Object



36
37
38
# File 'lib/freebox_api/freebox.rb', line 36

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

#challengeObject



48
49
50
# File 'lib/freebox_api/freebox.rb', line 48

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

#discoverObject



31
32
33
34
# File 'lib/freebox_api/freebox.rb', line 31

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

#http_call(http_method, path, params = nil, session = nil) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/freebox_api/freebox.rb', line 52

def http_call(http_method, path, params = nil, 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

  logger.info "#{http_method.upcase} #{path}"
  logger.debug "Params: #{params.inspect}"
  logger.debug "Headers: #{headers.inspect}"
  args << headers if headers
  process_data(@client[build_url(path)].send(*args))['result']
end

#process_data(response) ⇒ Object



70
71
72
73
74
75
76
77
78
# File 'lib/freebox_api/freebox.rb', line 70

def process_data(response)
  data = begin
    JSON.parse(response.body)
  rescue JSON::ParserError
    response.body
  end
  logger.debug "Returned data: #{data.inspect}"
  return data
end

#track_auth(track_id) ⇒ Object



44
45
46
# File 'lib/freebox_api/freebox.rb', line 44

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