diff --git a/app/controllers/submit_form_controller.rb b/app/controllers/submit_form_controller.rb index 276d7df8..8bd2e027 100644 --- a/app/controllers/submit_form_controller.rb +++ b/app/controllers/submit_form_controller.rb @@ -31,8 +31,6 @@ class SubmitFormController < ApplicationController Submitters::MaybeUpdateDefaultValues.call(@submitter, current_user) - cookies[:submitter_sid] = @submitter.signed_id - render(@submitter.submission.template.archived_at? || @submitter.submission.archived_at? ? :archived : :show) end diff --git a/config/initializers/active_storage.rb b/config/initializers/active_storage.rb index 8cf8b725..81c7240c 100644 --- a/config/initializers/active_storage.rb +++ b/config/initializers/active_storage.rb @@ -61,9 +61,6 @@ Rails.configuration.to_prepare do end ActiveStorage::DirectUploadsController.before_action do - next if current_user - next if Submitter.find_signed(cookies[:submitter_sid]) - head :forbidden end diff --git a/lib/templates/create_attachments.rb b/lib/templates/create_attachments.rb index 655da62c..1614e4ce 100644 --- a/lib/templates/create_attachments.rb +++ b/lib/templates/create_attachments.rb @@ -10,57 +10,36 @@ module Templates module_function def call(template, params) - find_or_create_blobs(params).map do |blob| - document_data = blob.download - - if !blob.image? && blob.content_type != PDF_CONTENT_TYPE - blob, document_data = handle_file_types(blob, document_data) + Array.wrap(params[:files].presence || params[:file]).map do |file| + if file.content_type.exclude?('image') && file.content_type != PDF_CONTENT_TYPE + file, document_data = handle_file_types(file) end - document = template.documents.create!(blob:) - - if blob.content_type == PDF_CONTENT_TYPE && blob.metadata['pdf'].nil? - data = maybe_decrypt_pdf_or_raise(document_data, params) + document_data ||= file.read - if data != document_data - blob = ActiveStorage::Blob.create_and_upload!( - io: StringIO.new(new_data), filename: blob.filename - ) - document_data = data - end + if file.content_type == PDF_CONTENT_TYPE + document_data = maybe_decrypt_pdf_or_raise(document_data, params) annotations = - document_data.size > ANNOTATIONS_SIZE_LIMIT ? [] : Templates::BuildAnnotations.call(document_data) - - blob.metadata['pdf'] = { 'annotations' => annotations } - blob.metadata['sha256'] = Base64.urlsafe_encode64(Digest::SHA256.digest(document_data)) + document_data.size < ANNOTATIONS_SIZE_LIMIT ? Templates::BuildAnnotations.call(document_data) : [] end - blob.save! - - Templates::ProcessDocument.call(document, document_data) - end - end - - def find_or_create_blobs(params) - params[:files].map do |file| - data = file.read - - if file.content_type == PDF_CONTENT_TYPE - data = maybe_decrypt_pdf_or_raise(data, params) - - annotations = data.size > ANNOTATIONS_SIZE_LIMIT ? [] : Templates::BuildAnnotations.call(data) - metadata = { 'identified' => true, 'analyzed' => true, - 'sha256' => Base64.urlsafe_encode64(Digest::SHA256.digest(data)), - 'pdf' => { 'annotations' => annotations } } - end + sha256 = Base64.urlsafe_encode64(Digest::SHA256.digest(document_data)) - ActiveStorage::Blob.create_and_upload!( - io: StringIO.new(data), + blob = ActiveStorage::Blob.create_and_upload!( + io: StringIO.new(document_data), filename: file.original_filename, - metadata:, + metadata: { + identified: file.content_type == PDF_CONTENT_TYPE, + analyzed: file.content_type == PDF_CONTENT_TYPE, + pdf: { annotations: }.compact_blank, sha256: + }.compact_blank, content_type: file.content_type ) + + document = template.documents.create!(blob:) + + Templates::ProcessDocument.call(document, document_data) end end @@ -74,7 +53,7 @@ module Templates raise PdfEncrypted end - def handle_file_types(_document_data, blob) + def handle_file_types(_file) raise InvalidFileType, blob.content_type end end