mirror of
https://github.com/docusealco/docuseal
synced 2026-11-04 06:42:32 -05:00
65 lines
1.6 KiB
Ruby
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
|