From 1b63b16691d2668d8f6617ffe814fb3e255fdd63 Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Thu, 5 Nov 2026 00:18:12 +0200 Subject: [PATCH] adjust filename --- app/controllers/api/submission_documents_controller.rb | 2 +- app/controllers/mcp/create_template_controller.rb | 4 +++- app/controllers/template_documents_controller.rb | 2 +- app/controllers/templates_debug_controller.rb | 2 +- app/controllers/templates_uploads_controller.rb | 2 +- app/views/submissions/show.html.erb | 4 ++-- lib/filename_utils.rb | 4 ++++ lib/submitters.rb | 2 +- lib/submitters/serialize_for_webhook.rb | 5 ++++- lib/templates/create_document_crop.rb | 2 +- lib/templates/modify_documents.rb | 6 +++--- lib/templates/replace_attachments.rb | 5 ++++- 12 files changed, 26 insertions(+), 14 deletions(-) diff --git a/app/controllers/api/submission_documents_controller.rb b/app/controllers/api/submission_documents_controller.rb index a26c5d86e..01531b633 100644 --- a/app/controllers/api/submission_documents_controller.rb +++ b/app/controllers/api/submission_documents_controller.rb @@ -22,7 +22,7 @@ module Api render json: { id: @submission.id, documents: documents.map do |attachment| - { name: attachment.filename.base, url: ActiveStorage::Blob.proxy_url(attachment.blob, expires_at:) } + { name: FilenameUtils.basename(attachment.blob[:filename]), url: ActiveStorage::Blob.proxy_url(attachment.blob, expires_at:) } end } end diff --git a/app/controllers/mcp/create_template_controller.rb b/app/controllers/mcp/create_template_controller.rb index 3d91686d6..fb4e5a365 100644 --- a/app/controllers/mcp/create_template_controller.rb +++ b/app/controllers/mcp/create_template_controller.rb @@ -66,7 +66,9 @@ module Mcp @template.save! documents, = Templates::CreateAttachments.call(@template, { files: [file] }, extract_fields: true) - schema = documents.map { |doc| { attachment_uuid: doc.uuid, name: doc.filename.base } } + schema = documents.map do |doc| + { attachment_uuid: doc.uuid, name: FilenameUtils.basename(doc.blob[:filename]) } + end if @template.fields.blank? @template.fields = Templates::ProcessDocument.normalize_attachment_fields(@template, documents) diff --git a/app/controllers/template_documents_controller.rb b/app/controllers/template_documents_controller.rb index 6aa95da02..f8056c8fc 100644 --- a/app/controllers/template_documents_controller.rb +++ b/app/controllers/template_documents_controller.rb @@ -31,7 +31,7 @@ class TemplateDocumentsController < ApplicationController documents, = Templates::CreateAttachments.call(@template, params, extract_fields: true) schema = documents.map do |doc| - { attachment_uuid: doc.uuid, name: doc.filename.base } + { attachment_uuid: doc.uuid, name: FilenameUtils.basename(doc.blob[:filename]) } end render json: { diff --git a/app/controllers/templates_debug_controller.rb b/app/controllers/templates_debug_controller.rb index 551d167f5..e05d2591c 100644 --- a/app/controllers/templates_debug_controller.rb +++ b/app/controllers/templates_debug_controller.rb @@ -67,7 +67,7 @@ class TemplatesDebugController < ApplicationController schema = documents.map do |doc| { attachment_uuid: doc.uuid, - name: doc.filename.base, + name: FilenameUtils.basename(doc.blob[:filename]), dynamic: dynamic_documents.find { |e| e.uuid == doc.uuid }.present? } end diff --git a/app/controllers/templates_uploads_controller.rb b/app/controllers/templates_uploads_controller.rb index 8ba069805..b4ad28bf3 100644 --- a/app/controllers/templates_uploads_controller.rb +++ b/app/controllers/templates_uploads_controller.rb @@ -17,7 +17,7 @@ class TemplatesUploadsController < ApplicationController save_template!(@template, url_params) documents, = Templates::CreateAttachments.call(@template, url_params || params, extract_fields: true) - schema = documents.map { |doc| { attachment_uuid: doc.uuid, name: doc.filename.base } } + schema = documents.map { |doc| { attachment_uuid: doc.uuid, name: FilenameUtils.basename(doc.blob[:filename]) } } if @template.fields.blank? @template.fields = Templates::ProcessDocument.normalize_attachment_fields(@template, documents) diff --git a/app/views/submissions/show.html.erb b/app/views/submissions/show.html.erb index 0599fc36b..5d640ca29 100644 --- a/app/views/submissions/show.html.erb +++ b/app/views/submissions/show.html.erb @@ -134,9 +134,9 @@ <% document = @submission.schema_documents.find { |a| item['attachment_uuid'] == a.uuid } %> <% if document.preview_images.first %> - <%= item['name'].presence || document.filename.base %> + <%= item['name'].presence || FilenameUtils.basename(document.blob[:filename]) %>
- <%= item['name'].presence || document.filename.base %> + <%= item['name'].presence || FilenameUtils.basename(document.blob[:filename]) %>
<% end %> diff --git a/lib/filename_utils.rb b/lib/filename_utils.rb index 7fceca4a1..40728e5ed 100644 --- a/lib/filename_utils.rb +++ b/lib/filename_utils.rb @@ -18,4 +18,8 @@ module FilenameUtils def dangerous_extension(filename) ActiveStorage::Filename.wrap(filename).sanitized[DANGEROUS_EXTENSIONS_REGEXP, 1]&.downcase end + + def basename(filename) + File.basename(filename, File.extname(filename)) + end end diff --git a/lib/submitters.rb b/lib/submitters.rb index 8f2578f52..e0ac5e449 100644 --- a/lib/submitters.rb +++ b/lib/submitters.rb @@ -232,7 +232,7 @@ module Submitters def build_document_filename(submitter, blob, filename_format) return blob.filename.to_s if filename_format.blank? - filename = filename_format.gsub('{document.name}', blob.filename.base) + filename = filename_format.gsub('{document.name}', FilenameUtils.basename(blob[:filename])) filename = ReplaceEmailVariables.call(filename, submitter:) filename = filename.gsub(' - {submission.status}') do diff --git a/lib/submitters/serialize_for_webhook.rb b/lib/submitters/serialize_for_webhook.rb index a7f207d7c..2582b6f99 100644 --- a/lib/submitters/serialize_for_webhook.rb +++ b/lib/submitters/serialize_for_webhook.rb @@ -104,7 +104,10 @@ module Submitters def build_documents_array(submitter, expires_at: nil) submitter.documents.map do |attachment| - { 'name' => attachment.filename.base, 'url' => rails_storage_proxy_url(attachment, expires_at:) } + { + 'name' => FilenameUtils.basename(attachment.blob[:filename]), + 'url' => rails_storage_proxy_url(attachment, expires_at:) + } end end diff --git a/lib/templates/create_document_crop.rb b/lib/templates/create_document_crop.rb index 213e8711a..bd9da350c 100644 --- a/lib/templates/create_document_crop.rb +++ b/lib/templates/create_document_crop.rb @@ -26,7 +26,7 @@ module Templates def create_document!(template, attachment, data, scan) blob = ActiveStorage::Blob.create_and_upload!( io: StringIO.new(data), - filename: "#{attachment.filename.base}.#{scan ? 'png' : 'jpg'}", + filename: "#{FilenameUtils.basename(attachment.blob[:filename])}.#{scan ? 'png' : 'jpg'}", metadata: { identified: true, analyzed: true }, content_type: scan ? 'image/png' : 'image/jpeg' ) diff --git a/lib/templates/modify_documents.rb b/lib/templates/modify_documents.rb index c038c62e2..c1b0f72e7 100644 --- a/lib/templates/modify_documents.rb +++ b/lib/templates/modify_documents.rb @@ -52,7 +52,7 @@ module Templates schema_item = template.schema.find { |item| item['attachment_uuid'] == entry['attachment_uuid'] } || { 'attachment_uuid' => entry['attachment_uuid'], - 'name' => attachments_index[entry['attachment_uuid']].filename.base } + 'name' => FilenameUtils.basename(attachments_index[entry['attachment_uuid']].blob[:filename]) } next if entry['pages'].blank? @@ -270,7 +270,7 @@ module Templates blob = ActiveStorage::Blob.create_and_upload!( io: StringIO.new(data), - filename: "#{attachment.filename.base}#{extension}", + filename: "#{FilenameUtils.basename(attachment.blob[:filename])}#{extension}", metadata: { identified: true, analyzed: true }, content_type: ) @@ -439,7 +439,7 @@ module Templates blob = ActiveStorage::Blob.create_and_upload!( io: StringIO.new(data), - filename: "#{old_attachment.filename.base}.pdf", + filename: "#{FilenameUtils.basename(old_attachment.blob[:filename])}.pdf", metadata: { identified: true, analyzed: true, pdf: { annotations: }.compact_blank, sha256: }.compact_blank, content_type: Templates::ProcessDocument::PDF_CONTENT_TYPE diff --git a/lib/templates/replace_attachments.rb b/lib/templates/replace_attachments.rb index 208894e40..90acce509 100644 --- a/lib/templates/replace_attachments.rb +++ b/lib/templates/replace_attachments.rb @@ -12,7 +12,10 @@ module Templates documents.each_with_index do |document, index| replaced_document_schema = template.schema[index] - template.schema[index] = { attachment_uuid: document.uuid, name: document.filename.base } + template.schema[index] = { + attachment_uuid: document.uuid, + name: FilenameUtils.basename(document.blob[:filename]) + } if replaced_document_schema template.fields.each do |field|