Files
docuseal/app/controllers/verify_pdf_signature_controller.rb
T

35 lines
1.2 KiB
Ruby
Raw Normal View History

2023-08-31 01:12:24 +03:00
# frozen_string_literal: true
class VerifyPdfSignatureController < ApplicationController
2023-09-17 00:45:57 +03:00
skip_authorization_check
2023-08-31 01:12:24 +03:00
def create
pdfs =
params[:files].map do |file|
HexaPDF::Document.new(io: file.open)
end
2023-08-31 01:49:14 +03:00
cert_data = if Docuseal.multitenant?
Docuseal::CERTS
else
2023-10-28 00:42:17 +03:00
EncryptedConfig.find_by(key: EncryptedConfig::ESIGN_CERTS_KEY)&.value || {}
2023-08-31 01:49:14 +03:00
end
2023-08-31 01:12:24 +03:00
default_pkcs = GenerateCertificate.load_pkcs(cert_data)
2023-09-01 01:27:13 +03:00
custom_certs = cert_data.fetch('custom', []).map do |e|
OpenSSL::PKCS12.new(Base64.urlsafe_decode64(e['data']), e['password'].to_s)
2023-08-31 01:12:24 +03:00
end
trusted_certs = [default_pkcs.certificate,
*default_pkcs.ca_certs,
*custom_certs.map(&:certificate),
*custom_certs.flat_map(&:ca_certs).compact]
render turbo_stream: turbo_stream.replace('result', partial: 'result',
locals: { pdfs:, files: params[:files], trusted_certs: })
rescue HexaPDF::MalformedPDFError
render turbo_stream: turbo_stream.replace('result', html: helpers.tag.div('Invalid PDF', id: 'result'))
end
end