sutty/app/models/metadata_encrypted_text.rb

35 lines
907 B
Ruby
Raw Normal View History

# frozen_string_literal: true
# Íbamos a usar OpenSSL pero esto es más simple de implementar y no
# tenemos que usar cifrado compatible con JavaScript.
class MetadataEncryptedText < MetadataText
# Decifra el valor si está guardado en el sitio
def value
self[:value] ||= if (v = document.data.dig(name.to_s))
box.decrypt_str v
else
default_value
end
rescue Lockbox::DecryptionError => e
ExceptionNotifier.notify_exception(e)
self[:value] ||= I18n.t('lockbox.help.decryption_error')
end
# Cifra el valor antes de guardarlo
def save
self[:value] = box.encrypt sanitize(value)
true
end
private
# Genera una lockbox a partir de la llave privada del sitio
#
# @return [Lockbox]
def box
@box ||= Lockbox.new key: site.private_key, padding: true, encode: true
end
end