Class: LicenseManagerSdk::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/licensemanager_sdk/client.rb

Overview

Cliente para a API de validação do LicenseManager. Encapsula geração de HMAC-SHA256 e os 4 endpoints de validação.

Examples:

Uso básico

client = LicenseManagerSdk::Client.new(
  base_url:   "https://licensemanager-api.enzojb.com.br",
  token:      "seu-token",
  license_id: "guid-da-licenca"
)
 = client.("usuario@empresa.com")
client.heartbeat(.session_id) if .authorized

Constant Summary collapse

MAX_RETRIES =
3

Instance Method Summary collapse

Constructor Details

#initialize(base_url:, token:, license_id:, timeout: 30) ⇒ Client

Returns a new instance of Client.

Raises:

  • (ArgumentError)


16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/licensemanager_sdk/client.rb', line 16

def initialize(base_url:, token:, license_id:, timeout: 30)
  raise ArgumentError, "base_url é obrigatório" if base_url.nil? || base_url.strip.empty?
  raise ArgumentError, "token é obrigatório"    if token.nil?    || token.strip.empty?
  raise ArgumentError, "license_id é obrigatório" if license_id.nil? || license_id.strip.empty?

  @base_url   = base_url.chomp("/")
  @token      = token
  # Normaliza GUID para lowercase com hífens — igual ao servidor (idLicenca:D)
  @license_id = license_id.match?(/\A[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\z/i) \
    ? license_id.downcase \
    : license_id
  @timeout    = timeout
end

Instance Method Details

#compute_signature(license_id, timestamp, body_json) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



72
73
74
75
76
77
78
79
# File 'lib/licensemanager_sdk/client.rb', line 72

def compute_signature(license_id, timestamp, body_json)
  # Normaliza para lowercase com hífens — igual ao servidor (idLicenca:D)
  normalized_id = license_id.match?(/\A[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\z/i) \
    ? license_id.downcase \
    : license_id
  payload = "#{normalized_id}:#{timestamp}:#{body_json}"
  OpenSSL::HMAC.hexdigest("SHA256", @token, payload)
end

#heartbeat(session_id) ⇒ Object

Envia heartbeat para manter a sessão ativa.

Parameters:

  • session_id (String)


44
45
46
47
48
# File 'lib/licensemanager_sdk/client.rb', line 44

def heartbeat(session_id)
  body = { idLicenca: @license_id, idSessao: session_id }
  post("api/validacao/heartbeat", body)
  nil
end

#login(user_id) ⇒ LoginResult

Valida login de um usuário numa licença.

Parameters:

  • user_id (String)

    identificador único do usuário

Returns:



33
34
35
36
37
38
39
40
# File 'lib/licensemanager_sdk/client.rb', line 33

def (user_id)
  body = { idLicenca: @license_id, identificadorUsuario: user_id }
  data = post("api/validacao/login", body)
  LoginResult.new(
    authorized: data["autorizado"] || false,
    session_id: data["idSessao"]
  )
end

#logout(session_id) ⇒ Object

Encerra a sessão (idempotente).

Parameters:

  • session_id (String)


52
53
54
55
56
# File 'lib/licensemanager_sdk/client.rb', line 52

def logout(session_id)
  body = { idLicenca: @license_id, idSessao: session_id }
  post("api/validacao/logout", body)
  nil
end

#validate_installation(machine_id) ⇒ InstallationResult

Valida ou registra uma instalação da aplicação cliente.

Parameters:

  • machine_id (String)

    identificador único da máquina

Returns:



61
62
63
64
65
66
67
68
69
# File 'lib/licensemanager_sdk/client.rb', line 61

def validate_installation(machine_id)
  body = { idLicenca: @license_id, identificadorMaquina: machine_id }
  data = post("api/validacao/instalacao", body)
  InstallationResult.new(
    authorized:        data["autorizado"]    || false,
    installation_id:   data["idInstalacao"],
    already_registered: data["jaRegistrada"] || false
  )
end