跳至內容 跳至搜尋
命名空間
方法
C
G
K
N
R
W

常數

CIPHER = "aes-128-gcm"
 

屬性

[R] content_path
[R] env_key
[R] key_path
[R] raise_if_missing_key

類別公開方法

generate_key()

# File activesupport/lib/active_support/encrypted_file.rb, line 31
def self.generate_key
  SecureRandom.hex(ActiveSupport::MessageEncryptor.key_len(CIPHER))
end

new(content_path:, key_path:, env_key:, raise_if_missing_key:)

# File activesupport/lib/active_support/encrypted_file.rb, line 42
def initialize(content_path:, key_path:, env_key:, raise_if_missing_key:)
  @content_path = Pathname.new(content_path).yield_self { |path| path.symlink? ? path.realpath : path }
  @key_path = Pathname.new(key_path)
  @env_key, @raise_if_missing_key = env_key, raise_if_missing_key
end

實例公開方法

change(&block)

# File activesupport/lib/active_support/encrypted_file.rb, line 83
def change(&block)
  writing read, &block
end

key()

回傳加密金鑰,首先嘗試由 `env_key` 指定的環境變數,然後嘗試由 `key_path` 指定的金鑰檔案。如果 `raise_if_missing_key` 為 true,且環境變數未設定且金鑰檔案不存在,則拋出 `MissingKeyError`

# File activesupport/lib/active_support/encrypted_file.rb, line 52
def key
  read_env_key || read_key_file || handle_missing_key
end

key?()

如果 `key` 為真,則回傳真值。否則回傳假值。與 `key` 不同,當 `raise_if_missing_key` 為 true 時,不會拋出 `MissingKeyError`

# File activesupport/lib/active_support/encrypted_file.rb, line 58
def key?
  read_env_key || read_key_file
end

read()

讀取檔案並回傳解密後的內容。

拋出例外

# File activesupport/lib/active_support/encrypted_file.rb, line 70
def read
  if !key.nil? && content_path.exist?
    decrypt content_path.binread.strip
  else
    raise MissingContentError, content_path
  end
end

write(contents)

# File activesupport/lib/active_support/encrypted_file.rb, line 78
def write(contents)
  IO.binwrite "#{content_path}.tmp", encrypt(contents)
  FileUtils.mv "#{content_path}.tmp", content_path
end