diff --git a/app/controllers/active_storage/disk_controller_decorator.rb b/app/controllers/active_storage/disk_controller_decorator.rb index 4c9c5166..26819b45 100644 --- a/app/controllers/active_storage/disk_controller_decorator.rb +++ b/app/controllers/active_storage/disk_controller_decorator.rb @@ -11,7 +11,7 @@ module ActiveStorage # Permitir incrustar archivos subidos (especialmente PDFs) desde # otros sitios. def show - original_show.tap do |s| + original_show.tap do |_s| response.headers.delete 'X-Frame-Options' end end @@ -24,20 +24,28 @@ module ActiveStorage if (token = decode_verified_token) if acceptable_content?(token) blob = ActiveStorage::Blob.find_by_key! token[:key] - site = Site.find_by_name token[:service_name] + site = Site.find_by_name! token[:service_name] if remote_file?(token) - url = request.body.read - body = Down.download(url, max_size: 111.megabytes) - checksum = Digest::MD5.file(body.path).base64digest - blob.metadata[:url] = url - blob.update_columns checksum: checksum, byte_size: body.size, metadata: blob.metadata + begin + url = request.body.read + body = Down.download(url, max_size: 111.megabytes) + checksum = Digest::MD5.file(body.path).base64digest + blob.metadata[:url] = url + blob.update_columns checksum:, byte_size: body.size, metadata: blob.metadata + rescue StandardError => e + ExceptionNotifier.notify_exception(e, data: { key: token[:key], url:, site: site.name }) + + head :content_too_large + + return + end else body = request.body checksum = token[:checksum] end - named_disk_service(token[:service_name]).upload token[:key], body, checksum: checksum + named_disk_service(site.name).upload(token[:key], body, checksum:) site.static_files.attach(blob) else @@ -46,7 +54,9 @@ module ActiveStorage else head :not_found end - rescue ActiveStorage::IntegrityError + rescue ActiveRecord::ActiveRecordError, ActiveStorage::Error => e + ExceptionNotifier.notify_exception(e, data: { token: }) + head :unprocessable_entity rescue Down::Error => e ExceptionNotifier.notify_exception(e, data: { key: token[:key], url: url, site: site.name }) @@ -62,7 +72,7 @@ module ActiveStorage def page_not_found(exception) head :not_found - ExceptionNotifier.notify_exception(exception, data: {params: params.to_hash}) + ExceptionNotifier.notify_exception(exception, data: { params: params.to_hash }) end end end