класс ActiveSupport::EncryptedFile
Константы
- CIPHER
Атрибуты
Публичные методы класса
# File activesupport/lib/active_support/encrypted_file.rb, line 31 def self.generate_key SecureRandom.hex(ActiveSupport::MessageEncryptor.key_len(CIPHER)) end
# 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 Публичные методы экземпляра
# File activesupport/lib/active_support/encrypted_file.rb, line 83 def change(&block) writing read, &block end
# File activesupport/lib/active_support/encrypted_file.rb, line 52 def key read_env_key || read_key_file || handle_missing_key end
Возвращает криптографический ключ, сначала пытаясь получить его из переменной окружения, указанной в env_key, а затем из файла ключа, указанного в key_path. Если 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
Возвращает истинное значение, если key имеет истинное значение. В противном случае возвращает ложное значение. В отличие от key, не генерирует исключение MissingKeyError, когда raise_if_missing_key имеет значение true.
# 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 Читает файл и возвращает дешифрованное содержимое.
Возникают следующие исключения:
-
MissingKeyError, если ключ отсутствует иraise_if_missing_keyимеет значение true. -
MissingContentError, если зашифрованный файл не существует или ключ отсутствует по другим причинам. -
ActiveSupport::MessageEncryptor::InvalidMessage, если содержимое не может быть дешифровано или проверено.
# 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
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.