Class: Slidict::External::SlidictIo::Auth
- Inherits:
-
Object
- Object
- Slidict::External::SlidictIo::Auth
- 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
-
#base_url ⇒ Object
readonly
Returns the value of attribute base_url.
Instance Method Summary collapse
-
#initialize(base_url: ENV.fetch("SLIDICT_AUTH_BASE_URL", DEFAULT_BASE_URL)) ⇒ Auth
constructor
A new instance of Auth.
- #poll_token(device_code:) ⇒ Object
- #request_device_code ⇒ Object
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_url ⇒ Object (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
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_code ⇒ Object
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 |