ActiveSupport::EncryptedFile (original) (raw)
Namespace
- CLASS ActiveSupport::EncryptedFile::InvalidKeyLengthError
- CLASS ActiveSupport::EncryptedFile::MissingContentError
- CLASS ActiveSupport::EncryptedFile::MissingKeyError
Methods
C
G
K
N
R
W
Constants
Attributes
[R] | content_path |
---|---|
[R] | env_key |
[R] | key_path |
[R] | raise_if_missing_key |
Class Public methods
generate_key()Link
def self.generate_key SecureRandom.hex(ActiveSupport::MessageEncryptor.key_len(CIPHER)) end
new(content_path:, key_path:, env_key:, raise_if_missing_key:)Link
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
Instance Public methods
change(&block)Link
def change(&block) writing read, &block end
key()Link
Returns the encryption key, first trying the environment variable specified by env_key, then trying the key file specified by key_path. If raise_if_missing_key is true, raises MissingKeyError if the environment variable is not set and the key file does not exist.
def key read_env_key || read_key_file || handle_missing_key end
read()Link
def read if !key.nil? && content_path.exist? decrypt content_path.binread.strip else raise MissingContentError, content_path end end
write(contents)Link
def write(contents) IO.binwrite "#{content_path}.tmp", encrypt(contents) FileUtils.mv "#{content_path}.tmp", content_path end