diff --git a/app/controllers/api/attachments_controller.rb b/app/controllers/api/attachments_controller.rb index eacabbd6..37e827b5 100644 --- a/app/controllers/api/attachments_controller.rb +++ b/app/controllers/api/attachments_controller.rb @@ -10,6 +10,12 @@ module Api def create submitter = Submitter.find_by!(slug: params[:submitter_slug]) + if params[:type].in?(%w[initials signature]) && ImageUtils.blank?(Vips::Image.new_from_file(params[:file].path)) + Rollbar.error("Empty signature: #{submitter.id}") if defined?(Rollbar) + + return render json: { error: "#{params[:type]} is empty" }, status: :unprocessable_entity + end + attachment = Submitters.create_attachment!(submitter, params) if params[:remember_signature] == 'true' && submitter.email.present? diff --git a/app/javascript/submission_form/initials_step.vue b/app/javascript/submission_form/initials_step.vue index 531b9784..fe36db8f 100644 --- a/app/javascript/submission_form/initials_step.vue +++ b/app/javascript/submission_form/initials_step.vue @@ -362,11 +362,20 @@ export default { formData.append('file', file) formData.append('submitter_slug', this.submitterSlug) formData.append('name', 'attachments') + formData.append('type', 'initials') return fetch(this.baseUrl + '/api/attachments', { method: 'POST', body: formData - }).then((resp) => resp.json()).then((attachment) => { + }).then(async (resp) => { + if (resp.status === 422 || resp.status === 500) { + const data = await resp.json() + + return Promise.reject(new Error(data.error)) + } + + const attachment = await resp.json() + this.$emit('attached', attachment) this.$emit('update:model-value', attachment.uuid) diff --git a/app/javascript/submission_form/signature_step.vue b/app/javascript/submission_form/signature_step.vue index 2011b77a..0b09e8cf 100644 --- a/app/javascript/submission_form/signature_step.vue +++ b/app/javascript/submission_form/signature_step.vue @@ -716,11 +716,20 @@ export default { formData.append('submitter_slug', this.submitterSlug) formData.append('name', 'attachments') formData.append('remember_signature', this.rememberSignature) + formData.append('type', 'signature') return fetch(this.baseUrl + '/api/attachments', { method: 'POST', body: formData - }).then((resp) => resp.json()).then((attachment) => { + }).then(async (resp) => { + if (resp.status === 422 || resp.status === 500) { + const data = await resp.json() + + return Promise.reject(new Error(data.error)) + } + + const attachment = await resp.json() + this.$emit('attached', attachment) this.$emit('update:model-value', attachment.uuid) diff --git a/lib/image_utils.rb b/lib/image_utils.rb index 18f99ad5..57f630a5 100644 --- a/lib/image_utils.rb +++ b/lib/image_utils.rb @@ -9,7 +9,6 @@ module ImageUtils return true if min.all?(255) && max.all?(255) return true if min.all?(0) && max.all?(0) - return true if min.length >= 4 && min[-1].zero? && max[-1].zero? false end