From d4aef79b68dc8e73e73d90966e434d7a3e8347c0 Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Tue, 29 Oct 2024 08:29:26 +0200 Subject: [PATCH 01/13] use tsa fallback url --- lib/submissions/timestamp_handler.rb | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/lib/submissions/timestamp_handler.rb b/lib/submissions/timestamp_handler.rb index 96f09f41..03b45d43 100644 --- a/lib/submissions/timestamp_handler.rb +++ b/lib/submissions/timestamp_handler.rb @@ -6,10 +6,10 @@ module Submissions TimestampError = Class.new(StandardError) - attr_reader :tsa_url + attr_reader :tsa_url, :tsa_fallback_url def initialize(tsa_url:) - @tsa_url = tsa_url + @tsa_url, @tsa_fallback_url = tsa_url.split(',') end def finalize_objects(_signature_field, signature) @@ -37,7 +37,16 @@ module Submissions response = conn.post(uri.path, build_payload(digest.digest), 'content-type' => 'application/timestamp-query') - raise TimestampError if response.status != 200 || response.body.blank? + if response.status != 200 || response.body.blank? + raise TimestampError if tsa_fallback_url.blank? + + Rollbar.error('TimestampError: use fallback URL') if defined?(Rollbar) + + response = Faraday.post(tsa_fallback_url, build_payload(digest.digest), + 'content-type' => 'application/timestamp-query') + + raise TimestampError if response.status != 200 || response.body.blank? + end OpenSSL::Timestamp::Response.new(response.body).token.to_der end From 6a298a068c6af5d818b212bc10946a6aefa705cd Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Tue, 29 Oct 2024 12:11:21 +0200 Subject: [PATCH 02/13] fix updated templates --- lib/templates/serialize_for_api.rb | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/templates/serialize_for_api.rb b/lib/templates/serialize_for_api.rb index 3087035b..f5f03ebe 100644 --- a/lib/templates/serialize_for_api.rb +++ b/lib/templates/serialize_for_api.rb @@ -25,9 +25,15 @@ module Templates name: :preview_images) .preload(:blob) - json[:documents] = template.schema.map do |item| + json[:documents] = template.schema.filter_map do |item| attachment = schema_documents.find { |e| e.uuid == item['attachment_uuid'] } + unless attachment + Rollbar.error("Documents missing: #{template.id}") if defined?(Rollbar) + + next + end + first_page_blob = preview_image_attachments.find { |e| e.record_id == attachment.id }&.blob first_page_blob ||= attachment.preview_images.joins(:blob).find_by(blob: { filename: ['0.jpg', '0.png'] })&.blob From d1d7571ee45310db6a23041e11a6eb084a4a9a5b Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Tue, 29 Oct 2024 16:44:07 +0200 Subject: [PATCH 03/13] disable decline email --- app/controllers/submit_form_decline_controller.rb | 5 ++++- app/models/user_config.rb | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/controllers/submit_form_decline_controller.rb b/app/controllers/submit_form_decline_controller.rb index 0fb9657e..a04f5ca2 100644 --- a/app/controllers/submit_form_decline_controller.rb +++ b/app/controllers/submit_form_decline_controller.rb @@ -21,7 +21,10 @@ class SubmitFormDeclineController < ApplicationController user = submitter.submission.created_by_user || submitter.template.author - SubmitterMailer.declined_email(submitter, user).deliver_later! + if user.user_configs.find_by(key: UserConfig::RECEIVE_DECLINED_EMAIL)&.value != false + SubmitterMailer.declined_email(submitter, user).deliver_later! + end + SendFormDeclinedWebhookRequestJob.perform_async('submitter_id' => submitter.id) redirect_to submit_form_path(submitter.slug) diff --git a/app/models/user_config.rb b/app/models/user_config.rb index c3ead052..c79be174 100644 --- a/app/models/user_config.rb +++ b/app/models/user_config.rb @@ -24,6 +24,7 @@ class UserConfig < ApplicationRecord SIGNATURE_KEY = 'signature' INITIALS_KEY = 'initials' RECEIVE_COMPLETED_EMAIL = 'receive_completed_email' + RECEIVE_DECLINED_EMAIL = 'receive_declined_email' belongs_to :user From f25fd3b03d0277734a8fb1b669de3705ec7afa6c Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Tue, 29 Oct 2024 17:11:44 +0200 Subject: [PATCH 04/13] do not edit if declined --- app/views/templates/_submission.html.erb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/templates/_submission.html.erb b/app/views/templates/_submission.html.erb index 8ec1ea27..8ae256d5 100644 --- a/app/views/templates/_submission.html.erb +++ b/app/views/templates/_submission.html.erb @@ -51,7 +51,7 @@ <%= submitter.name || submitter.email || submitter.phone %> - <% if can?(:update, submitter) && !submitter.start_form_submission_events.any? && !submission.archived_at? && !submission.expired? %> + <% if can?(:update, submitter) && !submitter.start_form_submission_events.any? && !submission.archived_at? && !submission.expired? && !submitter.declined_at? %> <%= link_to edit_submitter_path(submitter), class: 'shrink-0', data: { turbo_frame: 'modal' } do %> <%= svg_icon('pencil', class: 'w-5 h-5') %> @@ -144,7 +144,7 @@ <%= submitter.name || submitter.email || submitter.phone %> - <% if can?(:update, submitter) && !submitter.start_form_submission_events.any? && !submission.archived_at? && !submission.expired? %> + <% if can?(:update, submitter) && !submitter.start_form_submission_events.any? && !submission.archived_at? && !submission.expired? && !submitter.declined_at? %> <%= link_to edit_submitter_path(submitter), class: 'shrink-0', data: { turbo_frame: 'modal' } do %> <%= svg_icon('pencil', class: 'w-5 h-5') %> From 9bef28c8ba135b49098d2de562ca7aaddfaf1c8b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Oct 2024 12:12:36 +0200 Subject: [PATCH 05/13] Bump rexml from 3.3.8 to 3.3.9 in the bundler group across 1 directory (#50) --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 44d78ef9..b9151ec0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -437,7 +437,7 @@ GEM actionpack (>= 5.2) railties (>= 5.2) retriable (3.1.2) - rexml (3.3.8) + rexml (3.3.9) rotp (6.3.0) rqrcode (2.2.0) chunky_png (~> 1.0) From 3868557efdbb3d5a316afc176ef99fb642838d1f Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Wed, 30 Oct 2024 23:02:03 +0200 Subject: [PATCH 06/13] add define submitters --- app/javascript/template_builder/builder.vue | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/app/javascript/template_builder/builder.vue b/app/javascript/template_builder/builder.vue index ac671e9f..e3e17dbe 100644 --- a/app/javascript/template_builder/builder.vue +++ b/app/javascript/template_builder/builder.vue @@ -415,6 +415,7 @@ import Contenteditable from './contenteditable' import DocumentPreview from './preview' import DocumentControls from './controls' import MobileFields from './mobile_fields' +import FieldSubmitter from './field_submitter' import { IconPlus, IconUsersPlus, IconDeviceFloppy, IconChevronDown, IconEye, IconWritingSign, IconInnerShadowTop, IconInfoCircle, IconAdjustments } from '@tabler/icons-vue' import { v4 } from 'uuid' import { ref, computed } from 'vue' @@ -558,6 +559,11 @@ export default { required: false, default: () => [] }, + defineSubmitters: { + type: Array, + required: false, + default: () => [] + }, acceptFileTypes: { type: String, required: false, @@ -677,6 +683,7 @@ export default { } }, computed: { + submitterDefaultNames: FieldSubmitter.computed.names, selectedAreaRef: () => ref(), fieldsDragFieldRef: () => ref(), language () { @@ -749,6 +756,18 @@ export default { } }) + this.defineSubmitters.forEach((name, index) => { + const submitter = (this.template.submitters[index] ||= {}) + + submitter.name = name || this.submitterDefaultNames[index] + + if (existingSubmittersUuids.filter(Boolean).length) { + submitter.uuid = existingSubmittersUuids[index] || submitter.uuid || v4() + } else { + submitter.uuid ||= v4() + } + }) + this.selectedSubmitter = this.template.submitters[0] }, mounted () { From fb2b3d44fe16274f70fabd1a74bedfd6f202a43a Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Thu, 31 Oct 2024 00:51:21 +0200 Subject: [PATCH 07/13] fix bulk --- app/javascript/template_builder/import_list.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/javascript/template_builder/import_list.vue b/app/javascript/template_builder/import_list.vue index b8e1c415..be9af38e 100644 --- a/app/javascript/template_builder/import_list.vue +++ b/app/javascript/template_builder/import_list.vue @@ -77,7 +77,7 @@