Module: Lockbox::ActiveStorageExtensions::Attachment

Defined in:
lib/lockbox/active_storage_extensions.rb

Instance Method Summary collapse

Instance Method Details

#downloadObject



102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/lockbox/active_storage_extensions.rb', line 102

def download
  result = super

  options = Utils.encrypted_options(record, name)
  # only trust the metadata when migrating
  # as earlier versions of Lockbox won't have it
  # and it's not a good practice to trust modifiable data
  encrypted = options && (!options[:migrating] || blob.["encrypted"])
  if encrypted
    result = Utils.decrypt_result(record, name, options, result)
  end

  result
end

#open(**options) ⇒ Object



128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'lib/lockbox/active_storage_extensions.rb', line 128

def open(**options)
  blob.open(**options) do |file|
    options = Utils.encrypted_options(record, name)
    # only trust the metadata when migrating
    # as earlier versions of Lockbox won't have it
    # and it's not a good practice to trust modifiable data
    encrypted = options && (!options[:migrating] || blob.["encrypted"])
    if encrypted
      result = Utils.decrypt_result(record, name, options, file.read)
      file.rewind
      # truncate may not be available on all platforms
      # according to the Ruby docs
      # may need to create a new temp file instead
      file.truncate(0)
      file.write(result)
      file.rewind
    end

    yield file
  end
end

#preview(*args) ⇒ Object

Raises:



122
123
124
125
# File 'lib/lockbox/active_storage_extensions.rb', line 122

def preview(*args)
  raise Lockbox::Error, "Preview not supported for encrypted files" if Utils.encrypted_options(record, name)
  super
end

#variant(*args) ⇒ Object

Raises:



117
118
119
120
# File 'lib/lockbox/active_storage_extensions.rb', line 117

def variant(*args)
  raise Lockbox::Error, "Variant not supported for encrypted files" if Utils.encrypted_options(record, name)
  super
end