module JumpIn::PasswordReset

Public Instance Methods

generate_unique_token_for(user:) click to toggle source
# File lib/jump_in/password_reset.rb, line 21
def generate_unique_token_for(user:)
  loop do
    token = generate_token
    break token if token_uniq?(user: user, token: token)
  end
end
password_reset_valid?(password_reset_token:) click to toggle source

RECEIVING TOKEN

# File lib/jump_in/password_reset.rb, line 37
def password_reset_valid?(password_reset_token:)
  decode_time(password_reset_token) > Time.now - JumpIn.conf.expiration_time
end
set_password_reset_for(user:, token: nil) click to toggle source

CREATING TOKEN

# File lib/jump_in/password_reset.rb, line 8
def set_password_reset_for(user:, token: nil)
  if token_uniq_or_empty?(user: user, token: token)
    set_token(user: user, token: token)
  else
    false
  end
end
set_token(user:, token: nil) click to toggle source
# File lib/jump_in/password_reset.rb, line 16
def set_token(user:, token: nil)
  token ||= generate_unique_token_for(user: user)
  user.update_attribute(:password_reset_token, token)
end
token_correct?(user_token:, received_token:) click to toggle source
# File lib/jump_in/password_reset.rb, line 50
def token_correct?(user_token:, received_token:)
  user_token == received_token
end
token_uniq?(user:, token:) click to toggle source
# File lib/jump_in/password_reset.rb, line 32
def token_uniq?(user:, token:)
  !user.class.where(password_reset_token: token).exists?
end
token_uniq_or_empty?(user:, token:) click to toggle source
# File lib/jump_in/password_reset.rb, line 28
def token_uniq_or_empty?(user:, token:)
  (token && token_uniq?(user: user, token: token)) || token.nil?
end
update_password_for(user:, password:, password_confirmation:, password_reset_token:) click to toggle source
# File lib/jump_in/password_reset.rb, line 41
def update_password_for(user:, password:, password_confirmation:,
                        password_reset_token:)
  return false unless token_correct?(user_token: user.password_reset_token,
                                     received_token: password_reset_token)
  user.update_attributes(password: password,
                         password_confirmation: password_confirmation,
                         password_reset_token: nil)
end