Module: Keycardai::OAuth::Registration
- Defined in:
- lib/keycardai/oauth/registration.rb
Overview
Internals of dynamic client registration. Not public API.
Class Method Summary collapse
- .build(document) ⇒ Object
- .parse(response) ⇒ Object
- .parse_document(body) ⇒ Object
- .post(issuer, body, initial_access_token, http_client, timeout) ⇒ Object
Class Method Details
.build(document) ⇒ Object
108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/keycardai/oauth/registration.rb', line 108 def build(document) ClientRegistrationResponse.new( client_id: document["client_id"], client_secret: document["client_secret"], client_id_issued_at: document["client_id_issued_at"], client_secret_expires_at: document["client_secret_expires_at"], registration_access_token: document["registration_access_token"], registration_client_uri: document["registration_client_uri"], raw: document ) end |
.parse(response) ⇒ Object
91 92 93 94 95 |
# File 'lib/keycardai/oauth/registration.rb', line 91 def parse(response) raise TokenRequests.error_for(response) unless response.success? build(parse_document(response.body)) end |
.parse_document(body) ⇒ Object
97 98 99 100 101 102 103 104 105 106 |
# File 'lib/keycardai/oauth/registration.rb', line 97 def parse_document(body) document = JSON.parse(body) unless document.is_a?(Hash) && document["client_id"].is_a?(String) && !document["client_id"].empty? raise ProtocolError.new("registration response has no client_id", code: "invalid_response") end document rescue JSON::ParserError raise ProtocolError.new("registration response is not valid JSON", code: "invalid_response") end |
.post(issuer, body, initial_access_token, http_client, timeout) ⇒ Object
80 81 82 83 84 85 86 87 88 89 |
# File 'lib/keycardai/oauth/registration.rb', line 80 def post(issuer, body, initial_access_token, http_client, timeout) = OAuth.(issuer, http_client: http_client, timeout: timeout) endpoint = .registration_endpoint || raise(ProtocolError.new("metadata for #{issuer} has no registration_endpoint", code: "invalid_metadata")) headers = { "Accept" => "application/json" } headers["Authorization"] = "Bearer #{initial_access_token}" if initial_access_token parse(http_client.post_json(endpoint, body, headers: headers, timeout: timeout)) end |