diff --git a/Gemfile b/Gemfile index 2acbdb86..d2b338b1 100644 --- a/Gemfile +++ b/Gemfile @@ -20,6 +20,7 @@ gem 'oj' gem 'omniauth-google-oauth2' gem 'omniauth-rails_csrf_protection' gem 'pagy' +gem 'pdf-reader' gem 'pg', require: false gem 'premailer-rails' gem 'puma' diff --git a/Gemfile.lock b/Gemfile.lock index 7d99141d..e5da07a7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,6 +1,7 @@ GEM remote: https://rubygems.org/ specs: + Ascii85 (1.1.0) actioncable (7.0.7) actionpack (= 7.0.7) activesupport (= 7.0.7) @@ -68,6 +69,7 @@ GEM tzinfo (~> 2.0) addressable (2.8.5) public_suffix (>= 2.0.2, < 6.0) + afm (0.2.2) annotate (3.2.0) activerecord (>= 3.2, < 8.0) rake (>= 10.4, < 14.0) @@ -233,6 +235,7 @@ GEM os (>= 0.9, < 2.0) signet (>= 0.16, < 2.a) hashdiff (1.0.1) + hashery (2.1.2) hashie (5.0.0) hexapdf (0.33.0) cmdparse (~> 3.0, >= 3.0.3) @@ -335,6 +338,12 @@ GEM parser (3.2.2.3) ast (~> 2.4.1) racc + pdf-reader (2.11.0) + Ascii85 (~> 1.0) + afm (~> 0.2.1) + hashery (~> 2.0) + ruby-rc4 + ttfunk pg (1.5.3) premailer (1.21.0) addressable @@ -461,6 +470,7 @@ GEM rubocop-capybara (~> 2.17) rubocop-factory_bot (~> 2.22) ruby-progressbar (1.13.0) + ruby-rc4 (0.1.5) ruby-vips (2.1.4) ffi (~> 1.12) ruby2_keywords (0.0.5) @@ -502,6 +512,7 @@ GEM thor (1.2.2) timeout (0.4.0) trailblazer-option (0.1.2) + ttfunk (1.7.0) turbo-rails (1.4.0) actionpack (>= 6.0.0) activejob (>= 6.0.0) @@ -564,6 +575,7 @@ DEPENDENCIES omniauth-google-oauth2 omniauth-rails_csrf_protection pagy + pdf-reader pg premailer-rails pry-rails diff --git a/app/controllers/api/templates_documents_controller.rb b/app/controllers/api/templates_documents_controller.rb index 27432a38..db5ae398 100644 --- a/app/controllers/api/templates_documents_controller.rb +++ b/app/controllers/api/templates_documents_controller.rb @@ -7,12 +7,7 @@ module Api @template = current_account.templates.find(params[:template_id]) - documents = - find_or_create_blobs.map do |blob| - document = @template.documents.create!(blob:) - - Templates::ProcessDocument.call(document) - end + documents = Templates::CreateAttachments.call(@template, params) schema = documents.map do |doc| { attachment_uuid: doc.uuid, name: doc.filename.base } @@ -27,19 +22,5 @@ module Api ) } end - - private - - def find_or_create_blobs - blobs = params[:blobs]&.map do |attrs| - ActiveStorage::Blob.find_signed(attrs[:signed_id]) - end - - blobs || params[:files].map do |file| - ActiveStorage::Blob.create_and_upload!(io: file.open, - filename: file.original_filename, - content_type: file.content_type) - end - end end end diff --git a/app/controllers/esign_settings_controller.rb b/app/controllers/esign_settings_controller.rb index 6be16f27..ee3743d5 100644 --- a/app/controllers/esign_settings_controller.rb +++ b/app/controllers/esign_settings_controller.rb @@ -18,7 +18,7 @@ class EsignSettingsController < ApplicationController default_pkcs = GenerateCertificate.load_pkcs(cert_data) if cert_data['cert'].present? custom_pkcs_list = (cert_data['custom'] || []).map do |e| - { 'pkcs' => OpenSSL::PKCS12.new(Base64.urlsafe_decode64(e['data']), e['password']), + { 'pkcs' => OpenSSL::PKCS12.new(Base64.urlsafe_decode64(e['data']), e['password'].to_s), 'name' => e['name'], 'status' => e['status'] } end diff --git a/app/controllers/submissions_controller.rb b/app/controllers/submissions_controller.rb index 69cd6199..81bb8536 100644 --- a/app/controllers/submissions_controller.rb +++ b/app/controllers/submissions_controller.rb @@ -6,7 +6,7 @@ class SubmissionsController < ApplicationController def show @submission = Submission.joins(:template).where(template: { account_id: current_account.id }) - .preload(template: { documents_attachments: { preview_images_attachments: :blob } }) + .preload(:template, template_schema_documents: [:blob, { preview_images_attachments: :blob }]) .find(params[:id]) render :show, layout: 'plain' diff --git a/app/controllers/submit_form_controller.rb b/app/controllers/submit_form_controller.rb index 5a5dd026..501455ba 100644 --- a/app/controllers/submit_form_controller.rb +++ b/app/controllers/submit_form_controller.rb @@ -7,7 +7,9 @@ class SubmitFormController < ApplicationController def show @submitter = - Submitter.preload(submission: { template: { documents_attachments: { preview_images_attachments: :blob } } }) + Submitter.preload(submission: [ + :template, { template_schema_documents: [:blob, { preview_images_attachments: :blob }] } + ]) .find_by!(slug: params[:slug]) return redirect_to submit_form_completed_path(@submitter.slug) if @submitter.completed_at? diff --git a/app/controllers/verify_pdf_signature_controller.rb b/app/controllers/verify_pdf_signature_controller.rb index 34a92d0c..90d2dc52 100644 --- a/app/controllers/verify_pdf_signature_controller.rb +++ b/app/controllers/verify_pdf_signature_controller.rb @@ -10,13 +10,13 @@ class VerifyPdfSignatureController < ApplicationController cert_data = if Docuseal.multitenant? Docuseal::CERTS else - EncryptedConfig.find_by(account:, key: EncryptedConfig::ESIGN_CERTS_KEY)&.value || {} + EncryptedConfig.find_by(account: current_account, key: EncryptedConfig::ESIGN_CERTS_KEY)&.value || {} end default_pkcs = GenerateCertificate.load_pkcs(cert_data) - custom_certs = (cert_data['custom'] || []).map do |e| - OpenSSL::PKCS12.new(Base64.urlsafe_decode64(e['data']), e['password']) + custom_certs = cert_data.fetch('custom', []).map do |e| + OpenSSL::PKCS12.new(Base64.urlsafe_decode64(e['data']), e['password'].to_s) end trusted_certs = [default_pkcs.certificate, diff --git a/app/models/submission.rb b/app/models/submission.rb index 5ffcaf95..323b7586 100644 --- a/app/models/submission.rb +++ b/app/models/submission.rb @@ -38,6 +38,10 @@ class Submission < ApplicationRecord attribute :source, :string, default: 'link' + has_many :template_schema_documents, + ->(e) { where(uuid: (e.template_schema.presence || e.template.schema).pluck('attachment_uuid')) }, + through: :template, source: :documents_attachments + scope :active, -> { where(deleted_at: nil) } enum :source, { diff --git a/app/views/submissions/_annotation.html.erb b/app/views/submissions/_annotation.html.erb new file mode 100644 index 00000000..bcdead50 --- /dev/null +++ b/app/views/submissions/_annotation.html.erb @@ -0,0 +1 @@ + diff --git a/app/views/submissions/show.html.erb b/app/views/submissions/show.html.erb index 96b58c5a..ff08368d 100644 --- a/app/views/submissions/show.html.erb +++ b/app/views/submissions/show.html.erb @@ -24,7 +24,7 @@