Class: StandardId::Events::Subscribers::PasswordlessDeliverySubscriber

Inherits:
Base
  • Object
show all
Defined in:
lib/standard_id/events/subscribers/passwordless_delivery_subscriber.rb

Instance Method Summary collapse

Methods inherited from Base

attach, attached?, detach, #handle, subscribe_to, subscribe_to_pattern, subscribed_events, subscription_pattern

Instance Method Details

#call(event) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/standard_id/events/subscribers/passwordless_delivery_subscriber.rb', line 7

def call(event)
  # Per-call manual-delivery request takes precedence over the global
  # delivery config. Honors Otp.issue(delivery: :manual) callers who
  # deliver the code themselves (custom widget flows, step-up
  # challenges, etc.) and would otherwise receive a duplicate email
  # from this subscriber when c.passwordless.delivery == :built_in.
  return if event[:skip_sender]
  return unless built_in_delivery?
  return unless event[:channel] == "email"

  identifier = event[:identifier]
  code = event[:code_challenge]&.code

  return if identifier.blank? || code.blank?

  StandardId::PasswordlessMailer.with(
    email: identifier,
    otp_code: code
  ).otp_email.deliver_later
end

#handle_error(error, event) ⇒ Object



28
29
30
31
32
33
# File 'lib/standard_id/events/subscribers/passwordless_delivery_subscriber.rb', line 28

def handle_error(error, event)
  StandardId.logger.error(
    "[StandardId::PasswordlessDelivery] Failed to deliver OTP email " \
    "for #{event[:identifier]}: #{error.message}"
  )
end