- 類別 ActiveSupport::EncryptedFile::InvalidKeyLengthError
- 類別 ActiveSupport::EncryptedFile::MissingContentError
- 類別 ActiveSupport::EncryptedFile::MissingKeyError
常數
CIPHER | = | "aes-128-gcm" |
屬性
[R] | content_path | |
[R] | env_key | |
[R] | key_path | |
[R] | raise_if_missing_key |
類別公開方法
generate_key() 連結
來源:顯示 | 在 GitHub 上
# 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:) 連結
來源:顯示 | 在 GitHub 上
# 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) 連結
來源:顯示 | 在 GitHub 上
# 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
。
來源:顯示 | 在 GitHub 上
# 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
為真時,不會引發 MissingKeyError
。
來源:顯示 | 在 GitHub 上
# File activesupport/lib/active_support/encrypted_file.rb, line 58 def key? read_env_key || read_key_file end
read() 連結
讀取檔案並傳回解密後的內容。
引發
-
如果找不到金鑰且
raise_if_missing_key
為真,則會引發MissingKeyError
。 -
如果加密檔案不存在或找不到金鑰,則會引發
MissingContentError
。 -
如果無法解密或驗證內容,則會引發
ActiveSupport::MessageEncryptor::InvalidMessage
。
來源:顯示 | 在 GitHub 上
# File activesupport/lib/active_support/encrypted_file.rb, line 70 def read if !key.nil? && content_path.exist? decrypt content_path.binread else raise MissingContentError, content_path end end
write(contents) 連結
來源:顯示 | 在 GitHub 上
# 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