handle 2fa email bounce

This commit is contained in:
Pete Matsyburka committed 2026-09-04 09:01:51 +03:00
1 parent e316d2006f
commit 9ad281d457
7 files changed
+84

No files matched your search

+12
View File
@@ -11,6 +11,7 @@ module Submitters
}.freeze
UnableToSendCode = Class.new(StandardError)
BouncedEmail = Class.new(UnableToSendCode)
InvalidOtp = Class.new(StandardError)
MaliciousFileExtension = Class.new(StandardError)
ParamsError = Class.new(StandardError)
@@ -243,6 +244,12 @@ module Submitters
def send_shared_link_email_verification_code(submitter, request:)
RateLimit.call("send-otp-code-#{request.remote_ip}", limit: 2, ttl: 45.seconds, enabled: true)
if Docuseal.multitenant? && email_bounced_recently?(submitter.email)
Rollbar.warning("Bounced OTP email for template: #{submitter.submission.template.id}") if defined?(Rollbar)
raise BouncedEmail, I18n.t(:verification_email_bounced)
end
TemplateMailer.otp_verification_email(submitter.submission.template, email: submitter.email).deliver_later!
rescue RateLimit::LimitApproached
Rollbar.warning("Limit verification code for template: #{submitter.submission.template.id}") if defined?(Rollbar)
@@ -250,6 +257,11 @@ module Submitters
raise UnableToSendCode, I18n.t('too_many_attempts')
end
def email_bounced_recently?(email)
EmailEvent.exists?(email:, event_type: %w[bounce soft_bounce permanent_bounce],
event_datetime: 24.hours.ago..Time.current)
end
def verify_link_otp!(otp, submitter)
return false if otp.blank?