Module: JumpIn::PasswordReset

Includes:
Tokenator
Defined in:
lib/jump_in/password_reset.rb

Constant Summary

Constants included from Tokenator

Tokenator::DELIMITER

Instance Method Summary collapse

Methods included from Tokenator

#decode_and_split_token, #decode_time, #generate_token

Instance Method Details

#generate_unique_token_for(user:) ⇒ Object



21
22
23
24
25
26
# 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:) ⇒ Boolean

RECEIVING TOKEN

Returns:

  • (Boolean)


37
38
39
# 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) ⇒ Object

CREATING TOKEN



8
9
10
11
12
13
14
# 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) ⇒ Object



16
17
18
19
# 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:) ⇒ Boolean

Returns:

  • (Boolean)


50
51
52
# 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:) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
# 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:) ⇒ Boolean

Returns:

  • (Boolean)


28
29
30
# 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:) ⇒ Object



41
42
43
44
45
46
47
48
# 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