Module: Keycardai::OAuth::Registration

Defined in:
lib/keycardai/oauth/registration.rb

Overview

Internals of dynamic client registration. Not public API.

Class Method Summary collapse

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