diff --git a/app/controllers/api/attachments_controller.rb b/app/controllers/api/attachments_controller.rb index 37e827b5..dca89f67 100644 --- a/app/controllers/api/attachments_controller.rb +++ b/app/controllers/api/attachments_controller.rb @@ -10,10 +10,21 @@ 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) + if params[:type].in?(%w[initials signature]) + image = Vips::Image.new_from_file(params[:file].path) - return render json: { error: "#{params[:type]} is empty" }, status: :unprocessable_entity + if ImageUtils.blank?(image) + Rollbar.error("Empty signature: #{submitter.id}") if defined?(Rollbar) + + return render json: { error: "#{params[:type]} is empty" }, status: :unprocessable_entity + end + + if ImageUtils.error?(image) + Rollbar.error("Error signature: #{submitter.id}") if defined?(Rollbar) + + return render json: { error: "#{params[:type]} error, try to sign on another device" }, + status: :unprocessable_entity + end end attachment = Submitters.create_attachment!(submitter, params) diff --git a/lib/image_utils.rb b/lib/image_utils.rb index d29fc8f9..8e7aa094 100644 --- a/lib/image_utils.rb +++ b/lib/image_utils.rb @@ -14,4 +14,12 @@ module ImageUtils false end + + def error?(image) + image = image.crop(0, 0, image.width / 4, 2) + + row1, row2 = image.to_a + + row1[3..] == row2[..-4] && row1.each_cons(2).none? { |a, b| a == b } + end end