Files
docuseal/lib/submitters/find_remembered_signature.rb
T
2026-09-26 15:17:33 +03:00

65 lines
1.6 KiB
Ruby

# frozen_string_literal: true
module Submitters
module FindRememberedSignature
SIGNED_UUID_PURPOSE = 'signature'
module_function
def call(submitter, params, cookies = nil)
if params[:signed_signature_uuids].present?
find_storage_signature(submitter, params[:signed_signature_uuids])
elsif cookies
find_session_signature(submitter, cookies)
end
end
def sign_signature_uuid(uuid)
ApplicationRecord.signed_id_verifier.generate(uuid, purpose: SIGNED_UUID_PURPOSE)
end
def verify_signature_uuid(signed_uuid)
ApplicationRecord.signed_id_verifier.verified(signed_uuid, purpose: SIGNED_UUID_PURPOSE)
end
def find_storage_signature(submitter, signed_uuids)
signed_uuid = signed_uuids[submitter.email]
return if signed_uuid.blank?
uuid = verify_signature_uuid(signed_uuid)
return if uuid.blank?
find_signature_from_uuid(submitter, uuid)
end
def find_session_signature(submitter, cookies)
values =
begin
JSON.parse(cookies.encrypted[:signature_uuids].presence || '{}')
rescue JSON::ParserError
{}
end
return if values.blank?
uuid = values[submitter.email]
return if uuid.blank?
find_signature_from_uuid(submitter, uuid)
end
def find_signature_from_uuid(submitter, uuid)
signature_attachment = ActiveStorage::Attachment.find_by(uuid:)
return unless signature_attachment
return if signature_attachment.record.email != submitter.email
signature_attachment
end
end
end