Module: Kaseya::VSA

Extended by:
Configuration
Defined in:
lib/kaseya/vsa.rb,
lib/kaseya/vsa/api.rb,
lib/kaseya/vsa/client.rb,
lib/kaseya/vsa/connection.rb,
lib/kaseya/vsa/exceptions.rb,
lib/kaseya/vsa/client/logs.rb,
lib/kaseya/vsa/http_errors.rb,
lib/kaseya/vsa/json_errors.rb,
lib/kaseya/vsa/client/agents.rb,
lib/kaseya/vsa/client/alarms.rb,
lib/kaseya/vsa/client/assets.rb,
lib/kaseya/vsa/configuration.rb,
lib/kaseya/vsa/client/organizations.rb,
lib/kaseya/vsa/client/machine_groups.rb

Defined Under Namespace

Modules: Configuration Classes: Api, Client, Connection, HttpErrors, JsonErrors, VSAError

Constant Summary

Constants included from Configuration

Configuration::DEFAULT_DEBUG, Configuration::DEFAULT_USER_AGENT, Configuration::VALID_OPTIONS_KEYS

Class Method Summary collapse

Methods included from Configuration

configure, extended, options, reset

Class Method Details

.authenticate(host, username, password) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/kaseya/vsa.rb', line 15

def self.authenticate(host, username, password)
  nonce = SecureRandom.random_number(2**16).to_s
  raw2 = Digest::SHA256.hexdigest(password)
  pass2 = Digest::SHA256.hexdigest(Digest::SHA256.hexdigest(password + username) + nonce)
  raw1 = Digest::SHA1.hexdigest(password)
  pass1 = Digest::SHA1.hexdigest(Digest::SHA1.hexdigest(password + username) + nonce)

  auth_string = "user=#{username},pass2=#{pass2},pass1=#{pass1},rpass2=#{raw2},rpass1=#{raw1},rand2=#{nonce}"
  auth = Base64.strict_encode64(auth_string)

  conn = Faraday.new(url: "https://#{host}/api/v1.0", ssl: { verify: !debug }) do |faraday|
    faraday.use JsonErrors
    faraday.use HttpErrors

    faraday.request :authorization, :Basic, auth
    faraday.request :url_encoded
    faraday.response :json
    faraday.adapter Faraday.default_adapter
  end

  response = conn.get("auth")
  connection = Connection.new(host, response.body.dig("Result", "ApiToken"))
  Client.new(connection)
rescue Faraday::ConnectionFailed => e
  raise Kaseya::ConnectionFailed, e.message
end