class Monban::UseCase::Auth::Token::Reset

Public Instance Methods

send_mail(params) click to toggle source
# File lib/monban/use_case/auth/token/reset.rb, line 37
def send_mail(params)
  Getto::Params.new.validate(params) do |v|
    v.hash(
      email: v.combine([v.string, v.match(%r{@})]){|val| param_error!(email: val) },
    )
  end or param_error!(params: params)

  account_id = repository.account_id_by_email(
    email: params[:email],
  ) or error.invalid_account!

  token = create(
    account_id: account_id,
  )

  mailer.send_mail(
    email: params[:email],
    token: token,
  )

  nil
end

Private Instance Methods

create(account_id:) click to toggle source
# File lib/monban/use_case/auth/token/reset.rb, line 62
def create(account_id:)
  repository.transaction do
    repository.wipe_old_reset_password_token(now: time.now)

    reset_token = generate_reset_token!(account_id: account_id)

    auth.reset(
      public_id:   generate_public_id!(account_id: account_id),
      reset_token: reset_token,
      expired_at:  time.now + expire,
    )
  end
end
generate_reset_token!(account_id:) click to toggle source
# File lib/monban/use_case/auth/token/reset.rb, line 76
def generate_reset_token!(account_id:)
  i = 0
  while i < 100 do
    i += 1

    token = reset_token.create
    unless repository.reset_password_token_exists?(reset_token: token)
      repository.insert_reset_password_token(
        account_id:  account_id,
        reset_token: token,
        created_at:  time.now,
        expired_at:  time.now + expire,
      )
      return token
    end
  end

  error.server_error! "failed generate reset_token"
end