Class: RubyLLM::MCP::Auth::ClientRegistrar
- Inherits:
-
Object
- Object
- RubyLLM::MCP::Auth::ClientRegistrar
- Defined in:
- lib/ruby_llm/mcp/auth/client_registrar.rb
Overview
Service for registering OAuth clients Implements RFC 7591 (Dynamic Client Registration)
Instance Attribute Summary collapse
-
#config ⇒ Object
readonly
Returns the value of attribute config.
-
#http_client ⇒ Object
readonly
Returns the value of attribute http_client.
-
#logger ⇒ Object
readonly
Returns the value of attribute logger.
-
#storage ⇒ Object
readonly
Returns the value of attribute storage.
Instance Method Summary collapse
-
#get_or_register(server_url, server_metadata, grant_type, redirect_uri, scope) ⇒ ClientInfo
Get cached client info or register new client.
-
#initialize(http_client, storage, logger, config) ⇒ ClientRegistrar
constructor
A new instance of ClientRegistrar.
-
#register(server_url, server_metadata, grant_type, redirect_uri, scope) ⇒ ClientInfo
Register OAuth client dynamically (RFC 7591).
Constructor Details
#initialize(http_client, storage, logger, config) ⇒ ClientRegistrar
Returns a new instance of ClientRegistrar.
11 12 13 14 15 16 |
# File 'lib/ruby_llm/mcp/auth/client_registrar.rb', line 11 def initialize(http_client, storage, logger, config) @http_client = http_client @storage = storage @logger = logger @config = config end |
Instance Attribute Details
#config ⇒ Object (readonly)
Returns the value of attribute config.
9 10 11 |
# File 'lib/ruby_llm/mcp/auth/client_registrar.rb', line 9 def config @config end |
#http_client ⇒ Object (readonly)
Returns the value of attribute http_client.
9 10 11 |
# File 'lib/ruby_llm/mcp/auth/client_registrar.rb', line 9 def http_client @http_client end |
#logger ⇒ Object (readonly)
Returns the value of attribute logger.
9 10 11 |
# File 'lib/ruby_llm/mcp/auth/client_registrar.rb', line 9 def logger @logger end |
#storage ⇒ Object (readonly)
Returns the value of attribute storage.
9 10 11 |
# File 'lib/ruby_llm/mcp/auth/client_registrar.rb', line 9 def storage @storage end |
Instance Method Details
#get_or_register(server_url, server_metadata, grant_type, redirect_uri, scope) ⇒ ClientInfo
Get cached client info or register new client
25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/ruby_llm/mcp/auth/client_registrar.rb', line 25 def get_or_register(server_url, , grant_type, redirect_uri, scope) # Check cache first client_info = storage.get_client_info(server_url) return client_info if client_info && !client_info.client_secret_expired? # Register new client if no cached info or secret expired if .supports_registration? register(server_url, , grant_type, redirect_uri, scope) else raise Errors::TransportError.new( message: "OAuth server does not support dynamic client registration" ) end end |
#register(server_url, server_metadata, grant_type, redirect_uri, scope) ⇒ ClientInfo
Register OAuth client dynamically (RFC 7591)
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/ruby_llm/mcp/auth/client_registrar.rb', line 47 def register(server_url, , grant_type, redirect_uri, scope) logger.debug("Registering OAuth client at: #{.registration_endpoint}") = (grant_type, redirect_uri, scope) response = post_registration(, ) data = HttpResponseHandler.handle_response(response, context: "Client registration", expected_status: [200, 201]) = (data, redirect_uri) warn_redirect_uri_mismatch(, redirect_uri) client_info = create_client_info(data, ) storage.set_client_info(server_url, client_info) logger.debug("Client registered successfully: #{client_info.client_id}") client_info end |