modul Gem::GemcutterUtilities

Hilfsmethoden für die Verwendung der RubyGems API.

Die Klasse WebauthnListener ruft ein OTP ab, nachdem ein Benutzer erfolgreich eine WebAuthn-Authentifizierung mit dem Gem-Host durchgeführt hat. Eine Instanz öffnet einen Socket unter Verwendung der übergebenen TCPServer-Instanz und wartet auf eine Anfrage vom Gem-Host. Die Anfrage sollte eine GET-Anfrage an den Stamm-Pfad sein und den OTP-Code als Query-Parameter „code" enthalten. Der Listener gibt den Code zurück, der als OTP für API-Anfragen verwendet wird.

Arten von Antworten, die vom Listener nach Erhalt einer Anfrage gesendet werden

- 200 OK: OTP code was successfully retrieved
- 204 No Content: If the request was an OPTIONS request
- 400 Bad Request: If the request did not contain a query parameter `code`
- 404 Not Found: The request was not to the root path
- 405 Method Not Allowed: OTP code was not retrieved because the request was not a GET/OPTIONS request

Beispielverwendung

thread = Gem::WebauthnListener.listener_thread("https://rubygems.example", server)
thread.join
otp = thread[:otp]
error = thread[:error]

Die WebauthnListener Response-Klasse wird von WebauthnListener verwendet, um Antworten zu erstellen, die an den Gem-Host gesendet werden. Sie erstellt eine Gem::Net::HTTPResponse-Instanz bei der Initialisierung und kann in das entsprechende Format für die Socket-Übertragung mittels 'to_s' konvertiert werden. Gem::Net::HTTPResponse-Instanzen können nicht direkt über einen Socket gesendet werden.

Arten von Antwortklassen

- OkResponse
- NoContentResponse
- BadRequestResponse
- NotFoundResponse
- MethodNotAllowedResponse

Beispielverwendung

server = TCPServer.new(0)
socket = server.accept

response = OkResponse.for("https://rubygems.example")
socket.print response.to_s
socket.close

Die Klasse WebauthnPoller ruft ein OTP ab, nachdem ein Benutzer erfolgreich eine WebAuthn-Authentifizierung durchgeführt hat. Eine Instanz fragt den Gem-Host nach dem OTP-Code ab. Die Abfrageanfrage (api/v1/webauthn_verification/<webauthn_token>/status.json) wird alle 5 Sekunden an den Gem-Host gesendet und hat ein Timeout von 5 Minuten. Wenn das Feld „status" in der JSON-Antwort „success" lautet, enthält das Feld „code" den OTP-Code.

Beispielverwendung

thread = Gem::WebauthnPoller.poll_thread(
  {},
  "RubyGems.org",
  "https://rubygems.org/api/v1/webauthn_verification/odow34b93t6aPCdY",
  { email: "email@example.com", password: "password" }
)
thread.join
otp = thread[:otp]
error = thread[:error]