pull/440/head
Pete Matsyburka 9 months ago
parent 54426556d9
commit 0399531e0c

@ -18,7 +18,7 @@ module Submitters
def find_or_create_signature_from_value(submitter, value, attachments) def find_or_create_signature_from_value(submitter, value, attachments)
_, attachment = Submitters::NormalizeValues.normalize_attachment_value(value, _, attachment = Submitters::NormalizeValues.normalize_attachment_value(value,
'signature', { 'type' => 'signature' },
submitter.account, submitter.account,
attachments, attachments,
submitter) submitter)

@ -40,7 +40,7 @@ module Submitters
if field['type'].in?(%w[initials signature image file stamp]) && value.present? if field['type'].in?(%w[initials signature image file stamp]) && value.present?
new_value, new_attachments = new_value, new_attachments =
normalize_attachment_value(value, field['type'], template.account, attachments, for_submitter) normalize_attachment_value(value, field, template.account, attachments, for_submitter)
attachments.push(*new_attachments) attachments.push(*new_attachments)
@ -109,17 +109,17 @@ module Submitters
.merge(fields.index_by { |e| e['name'].to_s.downcase }) .merge(fields.index_by { |e| e['name'].to_s.downcase })
end end
def normalize_attachment_value(value, type, account, attachments, for_submitter = nil) def normalize_attachment_value(value, field, account, attachments, for_submitter = nil)
if value.is_a?(Array) if value.is_a?(Array)
new_attachments = value.map do |v| new_attachments = value.map do |v|
new_attachment = find_or_build_attachment(v, type, account, for_submitter) new_attachment = find_or_build_attachment(v, field, account, for_submitter)
attachments.find { |a| a.blob_id == new_attachment.blob_id } || new_attachment attachments.find { |a| a.blob_id == new_attachment.blob_id } || new_attachment
end end
[new_attachments.map(&:uuid), new_attachments] [new_attachments.map(&:uuid), new_attachments]
else else
new_attachment = find_or_build_attachment(value, type, account, for_submitter) new_attachment = find_or_build_attachment(value, field, account, for_submitter)
existing_attachment = attachments.find { |a| a.blob_id == new_attachment.blob_id } existing_attachment = attachments.find { |a| a.blob_id == new_attachment.blob_id }
@ -129,7 +129,9 @@ module Submitters
end end
end end
def find_or_build_attachment(value, type, account, for_submitter = nil) def find_or_build_attachment(value, field, account, for_submitter = nil)
type = field['type']
blob = blob =
if value.match?(%r{\Ahttps?://}) if value.match?(%r{\Ahttps?://})
find_or_create_blob_from_url(account, value) find_or_create_blob_from_url(account, value)
@ -138,6 +140,8 @@ module Submitters
elsif (data = Base64.decode64(value.sub(BASE64_PREFIX_REGEXP, ''))) && elsif (data = Base64.decode64(value.sub(BASE64_PREFIX_REGEXP, ''))) &&
Marcel::MimeType.for(data).exclude?('octet-stream') Marcel::MimeType.for(data).exclude?('octet-stream')
find_or_create_blob_from_base64(account, data, type) find_or_create_blob_from_base64(account, data, type)
elsif type == 'image' && (value.starts_with?('<html>') || value.starts_with?('<!DOCTYPE'))
find_or_create_blob_from_html(account, value, field)
else else
raise InvalidDefaultValue, "Invalid value, url, base64 or text < 60 chars is expected: #{value.first(200)}..." raise InvalidDefaultValue, "Invalid value, url, base64 or text < 60 chars is expected: #{value.first(200)}..."
end end
@ -152,6 +156,10 @@ module Submitters
attachment attachment
end end
def find_or_create_blob_from_html(_account, value, _field)
raise InvalidDefaultValue, "HTML content is not allowed: #{value.first(200)}..."
end
def find_or_create_blob_from_base64(account, data, type) def find_or_create_blob_from_base64(account, data, type)
checksum = Digest::MD5.base64digest(data) checksum = Digest::MD5.base64digest(data)

Loading…
Cancel
Save