class CryptIdent::GenerateResetToken

Generate Reset Token for non-Authenticated User

This class *is not* part of the published API. @private

Constants

LogicError

Attributes

current_user[R]

rubocop:enable Naming/RescuedExceptionsVariableName

user_name[R]

rubocop:enable Naming/RescuedExceptionsVariableName

Public Class Methods

new() click to toggle source
# File lib/crypt_ident/generate_reset_token.rb, line 130
def initialize
  @current_user = nil
  @user_name = :unassigned
end

Public Instance Methods

call(user_name, current_user: nil) click to toggle source

rubocop:disable Naming/RescuedExceptionsVariableName

# File lib/crypt_ident/generate_reset_token.rb, line 136
def call(user_name, current_user: nil)
  init_ivars(user_name, current_user)
  Success(user: updated_user)
rescue LogicError => err
  # rubocop:disable Security/MarshalLoad
  error_data = Marshal.load(err.message)
  # rubocop:enable Security/MarshalLoad
  Failure(error_data)
end

Private Instance Methods

current_user_or_guest() click to toggle source
# File lib/crypt_ident/generate_reset_token.rb, line 151
def current_user_or_guest
  guest_user = CryptIdent.config.repository.guest_user
  current_user = @current_user || guest_user
  # This will convert a Hash of attributes to an Entity instance. It leaves
  # an actual Entity value unmolested.
  @current_user = guest_user.class.new(current_user)
end
find_user_by_name() click to toggle source
# File lib/crypt_ident/generate_reset_token.rb, line 184
def find_user_by_name
  # will be `nil` if no match found
  CryptIdent.config.repository.find_by_name(user_name)
end
init_ivars(user_name, current_user) click to toggle source
# File lib/crypt_ident/generate_reset_token.rb, line 159
def init_ivars(user_name, current_user)
  @current_user = current_user
  @user_name = user_name
end
new_token() click to toggle source
# File lib/crypt_ident/generate_reset_token.rb, line 164
def new_token
  token_length = CryptIdent.config.token_bytes
  clear_text_token = SecureRandom.alphanumeric(token_length)
  Base64.strict_encode64(clear_text_token)
end
update_repo(user) click to toggle source
# File lib/crypt_ident/generate_reset_token.rb, line 170
def update_repo(user)
  CryptIdent.config.repository.update(user.id, updated_attribs)
end
updated_attribs() click to toggle source
# File lib/crypt_ident/generate_reset_token.rb, line 174
def updated_attribs
  prea = Time.now + CryptIdent.config.reset_expiry
  { token: new_token, password_reset_expires_at: prea }
end
updated_user() click to toggle source
# File lib/crypt_ident/generate_reset_token.rb, line 179
def updated_user
  validate_current_user
  update_repo(user_by_name)
end
user_by_name() click to toggle source
# File lib/crypt_ident/generate_reset_token.rb, line 189
def user_by_name
  found_user = find_user_by_name
  raise LogicError, user_not_found_error unless found_user

  found_user
end
user_logged_in_error() click to toggle source
# File lib/crypt_ident/generate_reset_token.rb, line 196
def user_logged_in_error
  Marshal.dump(code: :user_logged_in, current_user: current_user,
               name: :unassigned)
end
user_not_found_error() click to toggle source
# File lib/crypt_ident/generate_reset_token.rb, line 201
def user_not_found_error
  Marshal.dump(code: :user_not_found, current_user: current_user,
               name: user_name)
end
validate_current_user() click to toggle source
# File lib/crypt_ident/generate_reset_token.rb, line 206
def validate_current_user
  return current_user if current_user_or_guest.guest?

  raise LogicError, user_logged_in_error
end