Class: SpreeCmCommissioner::UserForgottenPasswordUpdater

Inherits:
BaseInteractor
  • Object
show all
Defined in:
app/interactors/spree_cm_commissioner/user_forgotten_password_updater.rb

Instance Method Summary collapse

Instance Method Details

#callObject

:email, :phone_number, :country_code :pin_code, :pin_code_token, :password, :password_confirmation



5
6
7
8
9
# File 'app/interactors/spree_cm_commissioner/user_forgotten_password_updater.rb', line 5

def call
  find_user_by_login!
  validate_pin_code!
  reset_password!
end

#emailObject



15
16
17
# File 'app/interactors/spree_cm_commissioner/user_forgotten_password_updater.rb', line 15

def email
  context.email&.strip
end

#find_user_by_login!Object



19
20
21
22
23
24
# File 'app/interactors/spree_cm_commissioner/user_forgotten_password_updater.rb', line 19

def find_user_by_login!
   = phone_number || email

  context.user = Spree.user_class.()
  context.fail!(message: I18n.t('account_checker.verify.not_exist', login: )) if context.user.blank?
end

#phone_numberObject



11
12
13
# File 'app/interactors/spree_cm_commissioner/user_forgotten_password_updater.rb', line 11

def phone_number
  context.phone_number&.strip
end

#reset_password!Object



37
38
39
40
41
42
43
44
45
# File 'app/interactors/spree_cm_commissioner/user_forgotten_password_updater.rb', line 37

def reset_password!
  ok = context.user.reset_password(context.password, context.password_confirmation)

  if ok
    SpreeCmCommissioner::PinCode.mark_expired!(context.pin_code_token)
  else
    context.fail!(message: context.user.errors.full_messages.join("\n").presence)
  end
end

#validate_pin_code!Object



26
27
28
29
30
31
32
33
34
35
# File 'app/interactors/spree_cm_commissioner/user_forgotten_password_updater.rb', line 26

def validate_pin_code!
  options = context.to_h.slice(:email, :phone_number, :country_code, :pin_code, :pin_code_token)
  options[:type] = 'SpreeCmCommissioner::PinCodeForgetPassword'
  options[:long_life_pin_code] = true

  pin_code_checker = SpreeCmCommissioner::PinCodeChecker.call(options)
  return if pin_code_checker.success?

  context.fail!(message: pin_code_checker.message)
end