# 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