Class: AtreaControl::Duplex::Login

Inherits:
Object
  • Object
show all
Includes:
Logger
Defined in:
lib/atrea_control/duplex/login.rb

Overview

Process login into RD5 to get ‘sid` ( auth_token ) for direct API communication

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Logger

#logger

Constructor Details

#initialize(login:, password:) ⇒ Login

Returns a new instance of Login.

Parameters:

  • login (String)
  • password (String)


21
22
23
24
# File 'lib/atrea_control/duplex/login.rb', line 21

def initialize(login:, password:)
  @login = 
  @password = password
end

Class Method Details

.user_tokens(login:, password:) ⇒ Hash

Returns - user_id, unit_id, sid.

Returns:

  • (Hash)
    • user_id, unit_id, sid



14
15
16
17
# File 'lib/atrea_control/duplex/login.rb', line 14

def self.user_tokens(login:, password:)
  instance = new(login: , password: password)
  instance.call
end

Instance Method Details

#callHash

Perform login procedure for retrieve ‘sid` (auth_token)

Returns:

  • (Hash)
    • user_id, unit_id, sid

Raises:



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/atrea_control/duplex/login.rb', line 29

def call
  @sid = sid
  if @sid == "0"
     = RestClient.post "#{AtreaControl::Duplex::CONTROL_URI}/apps/rd5Control/handle.php?action=unitLogin&user=#{user_id}&unit=#{unit_id}&table=userUnits&idPwd=#{unit[:iid]}&#{SecureRandom.hex(2)}&_ts=#{SecureRandom.hex(4)}",
                               { comm: "config/login.cgi?magic=" }, headers
    time = Nokogiri::XML(.body).at_xpath("//sended")["time"].to_i
    logger.debug "Login in #{time} seconds..."
    time.times do
      @sid = sid
      break if @sid != "0"

      sleep 1
    end
    raise AtreaControl::Error, "Login failed" if @sid == "0"

    logger.debug "Login complete !"
  else
    logger.debug "Login is not necessary ! SID: #{@sid}"
  end
  { user_id:, unit_id:, sid: @sid }
end