Sha256: e396ae73bc37a872d9b0ff4975bd161aa116205cb64a888f2f7435ca1755f97c

Contents?: true

Size: 1.56 KB

Versions: 5

Compression:

Stored size: 1.56 KB

Contents

# frozen_string_literal: true

module Masks
  module Credentials
    # Checks for a :recovery on the session.
    class Recovery < Masks::Credential
      checks :recovery

      def lookup
        return if actor

        @recovery =
          if recovery_key
            config.find_recovery(session, token: recovery_key)
          else
            config.build_recovery(
              session,
              nickname: nickname_param,
              email: email_param,
              phone: phone_param,
              value: recovery_value
            )
          end

        session.extras(recovery: @recovery)

        @recovery&.actor
      end

      def maskup
        return unless valid? && actor

        if recovery_key
          if recovery_password && @recovery&.valid?
            @recovery.reset_password!(recovery_password)
            approve!
          end
        elsif recovery_value && @recovery&.valid?
          @recovery.notify!
        end
      end

      private

      def recovery_value
        params.dig(:recover, :value) if writable?
      end

      def recovery_key
        params[:token]
      end

      def recovery_password
        params.dig(:recover, :password) if writable?
      end

      def phone_param
        @phone_param ||= Phonelib.valid?(recovery_value) ? recovery_value : nil
      end

      def email_param
        @email_param ||=
          ValidateEmail.valid?(recovery_value) ? recovery_value : nil
      end

      def nickname_param
        @nickname_param ||= prefix_nickname(recovery_value, default: nil)
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
masks-0.4.0 app/models/masks/credentials/recovery.rb
masks-0.3.2 app/models/masks/credentials/recovery.rb
masks-0.3.1 app/models/masks/credentials/recovery.rb
masks-0.3.0 app/models/masks/credentials/recovery.rb
masks-0.2.0 app/models/masks/credentials/recovery.rb