Class: Slidict::External::SlidictIo::Auth

Inherits:
Object
  • Object
show all
Defined in:
lib/slidict/external/slidict_io/auth.rb

Constant Summary collapse

Error =
Class.new(StandardError)
Pending =
Class.new(StandardError)
DEFAULT_BASE_URL =
"https://slidict.io"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base_url: ENV.fetch("SLIDICT_AUTH_BASE_URL", DEFAULT_BASE_URL)) ⇒ Auth

Returns a new instance of Auth.



18
19
20
# File 'lib/slidict/external/slidict_io/auth.rb', line 18

def initialize(base_url: ENV.fetch("SLIDICT_AUTH_BASE_URL", DEFAULT_BASE_URL))
  @base_url = base_url
end

Instance Attribute Details

#base_urlObject (readonly)

Returns the value of attribute base_url.



16
17
18
# File 'lib/slidict/external/slidict_io/auth.rb', line 16

def base_url
  @base_url
end

Instance Method Details

#poll_token(device_code:) ⇒ Object

Raises:



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/slidict/external/slidict_io/auth.rb', line 33

def poll_token(device_code:)
  response = post_json(
    "/api/cli/device/token",
    { device_code: device_code, grant_type: "urn:ietf:params:oauth:grant-type:device_code" },
    raise_on_http_error: false
  )
  return response if response["access_token"]

  error = response["error"].to_s
  raise Pending if %w[authorization_pending slow_down].include?(error)

  raise Error, response["error_description"] || error unless error.empty?

  raise Error, "token response did not include access_token"
end

#request_device_codeObject



22
23
24
25
26
27
28
29
30
31
# File 'lib/slidict/external/slidict_io/auth.rb', line 22

def request_device_code
  response = post_json("/api/cli/device/code", { provider: "github" })
  {
    device_code: fetch!(response, "device_code"),
    user_code: fetch!(response, "user_code"),
    verification_uri: response["verification_uri"] || "#{base_url}/cli/activate",
    interval: response.fetch("interval", 5).to_i,
    expires_in: response.fetch("expires_in", 600).to_i
  }
end