Class: LeanCms::MagicLink

Inherits:
ApplicationRecord
  • Object
show all
Defined in:
app/models/lean_cms/magic_link.rb

Constant Summary collapse

PURPOSES =
%w[invitation password_reset].freeze
EXPIRATION_TIMES =
{
  "invitation" => 24.hours,
  "password_reset" => 2.hours
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.create_for_invitation(user, created_by_ip: nil) ⇒ Object



24
25
26
27
28
29
30
# File 'app/models/lean_cms/magic_link.rb', line 24

def self.create_for_invitation(user, created_by_ip: nil)
  create!(
    user: user,
    purpose: "invitation",
    created_by_ip: created_by_ip
  )
end

.create_for_password_reset(user, created_by_ip: nil) ⇒ Object



32
33
34
35
36
37
38
39
40
# File 'app/models/lean_cms/magic_link.rb', line 32

def self.create_for_password_reset(user, created_by_ip: nil)
  where(user: user).for_purpose("password_reset").valid.update_all(used_at: Time.current)

  create!(
    user: user,
    purpose: "password_reset",
    created_by_ip: created_by_ip
  )
end

Instance Method Details

#expired?Boolean

Returns:

  • (Boolean)


42
43
44
# File 'app/models/lean_cms/magic_link.rb', line 42

def expired?
  expires_at <= Time.current
end

#invitation?Boolean

Returns:

  • (Boolean)


58
59
60
# File 'app/models/lean_cms/magic_link.rb', line 58

def invitation?
  purpose == "invitation"
end

#mark_as_used!(ip_address = nil) ⇒ Object



54
55
56
# File 'app/models/lean_cms/magic_link.rb', line 54

def mark_as_used!(ip_address = nil)
  update!(used_at: Time.current, used_from_ip: ip_address)
end

#password_reset?Boolean

Returns:

  • (Boolean)


62
63
64
# File 'app/models/lean_cms/magic_link.rb', line 62

def password_reset?
  purpose == "password_reset"
end

#used?Boolean

Returns:

  • (Boolean)


46
47
48
# File 'app/models/lean_cms/magic_link.rb', line 46

def used?
  used_at.present?
end

#valid_for_use?Boolean

Returns:

  • (Boolean)


50
51
52
# File 'app/models/lean_cms/magic_link.rb', line 50

def valid_for_use?
  !expired? && !used?
end