35 lines
907 B
Ruby
35 lines
907 B
Ruby
|
# 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
|