Class: Keycardai::OAuth::FilePrivateKeyStorage

Inherits:
Object
  • Object
show all
Defined in:
lib/keycardai/oauth/private_key.rb

Overview

Pluggable keypair persistence for WebIdentity. The duck type is load(key_id) returning a PEM string or nil, and store(key_id, pem). This default stores PEM files on disk, checking legacy directories on load so existing keys keep working.

Constant Summary collapse

DEFAULT_DIR =
"./server_keys"
LEGACY_DIRS =
["./mcp_keys"].freeze

Instance Method Summary collapse

Constructor Details

#initialize(dir: DEFAULT_DIR) ⇒ FilePrivateKeyStorage

Returns a new instance of FilePrivateKeyStorage.

Parameters:

  • dir (String) (defaults to: DEFAULT_DIR)

    directory for new and existing keys



19
20
21
# File 'lib/keycardai/oauth/private_key.rb', line 19

def initialize(dir: DEFAULT_DIR)
  @dir = dir
end

Instance Method Details

#load(key_id) ⇒ String?

Returns the stored PEM, or nil when absent.

Parameters:

  • key_id (String)

Returns:

  • (String, nil)

    the stored PEM, or nil when absent



25
26
27
28
29
30
31
# File 'lib/keycardai/oauth/private_key.rb', line 25

def load(key_id)
  [@dir, *LEGACY_DIRS].each do |dir|
    path = File.join(dir, "#{key_id}.pem")
    return File.read(path) if File.file?(path)
  end
  nil
end

#store(key_id, pem) ⇒ void

This method returns an undefined value.

Parameters:

  • key_id (String)
  • pem (String)


36
37
38
39
40
41
# File 'lib/keycardai/oauth/private_key.rb', line 36

def store(key_id, pem)
  FileUtils.mkdir_p(@dir)
  path = File.join(@dir, "#{key_id}.pem")
  File.write(path, pem)
  File.chmod(0o600, path)
end