class Gem::GemcutterUtilities::WebauthnPoller
Constants
- TIMEOUT_IN_SECONDS
Attributes
host
[R]
options
[R]
Public Class Methods
new
(options, host)
# File lib/rubygems/gemcutter_utilities/webauthn_poller.rb, line 29 def initialize(options, host) @options = options @host = host end
poll_thread
(options, host, webauthn_url, credentials)
# File lib/rubygems/gemcutter_utilities/webauthn_poller.rb, line 34 def self.poll_thread(options, host, webauthn_url, credentials) Thread.new do thread = Thread.current thread.abort_on_exception = true thread.report_on_exception = false thread[:otp] = new(options, host).poll_for_otp(webauthn_url, credentials) rescue Gem::WebauthnVerificationError, Gem::Timeout::Error => e thread[:error] = e end end
Public Instance Methods
poll_for_otp
(webauthn_url, credentials)
# File lib/rubygems/gemcutter_utilities/webauthn_poller.rb, line 45 def poll_for_otp(webauthn_url, credentials) Gem::Timeout.timeout(TIMEOUT_IN_SECONDS) do loop do response = webauthn_verification_poll_response(webauthn_url, credentials) raise Gem::WebauthnVerificationError, response.message unless response.is_a?(Gem::Net::HTTPSuccess) require "json" parsed_response = JSON.parse(response.body) case parsed_response["status"] when "pending" sleep 5 when "success" return parsed_response["code"] else raise Gem::WebauthnVerificationError, parsed_response.fetch("message", "Invalid response from server") end end end end