Class: Obscured::Doorman::User

Inherits:
Object
  • Object
show all
Includes:
Mongoid::Document, Mongoid::Timeline::Tracker, Mongoid::Timestamps
Defined in:
lib/obscured-doorman/models/user.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#confirmedObject

Returns the value of attribute confirmed.



33
34
35
# File 'lib/obscured-doorman/models/user.rb', line 33

def confirmed
  @confirmed
end

Class Method Details

.authenticate(username, password) ⇒ Object



57
58
59
60
61
62
# File 'lib/obscured-doorman/models/user.rb', line 57

def authenticate(username, password)
  user = where(username: username).first
  return user if user&.authenticated?(password)

  nil
end

.make(opts) ⇒ Object

Raises:



36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/obscured-doorman/models/user.rb', line 36

def make(opts)
  raise Doorman::Error.new(:already_exists, what: 'User does already exists!') if User.where(username: opts[:username]).exists?

  user = new
  user.username = opts[:username]
  user.set_password(opts[:password])
  user.first_name = opts[:first_name] unless opts[:first_name].nil?
  user.last_name = opts[:last_name] unless opts[:last_name].nil?
  user.mobile = opts[:mobile] unless opts[:mobile].nil?
  user.role = opts[:role] unless opts[:role].nil?
  user.confirmed = opts[:confirmed] unless opts[:confirmed].nil?
  user.add_event(type: :account, message: 'Account created', producer: opts[:producer].nil? ? user.username : opts[:producer])
  user
end

.make!(opts) ⇒ Object



51
52
53
54
55
# File 'lib/obscured-doorman/models/user.rb', line 51

def make!(opts)
  user = make(opts)
  user.save
  user
end

.registered?(username) ⇒ Boolean

Returns:

  • (Boolean)


64
65
66
# File 'lib/obscured-doorman/models/user.rb', line 64

def registered?(username)
  where(username: username).exists?
end

Instance Method Details

#authenticated?(password) ⇒ Boolean Also known as: password?

Returns:

  • (Boolean)


82
83
84
# File 'lib/obscured-doorman/models/user.rb', line 82

def authenticated?(password)
  (BCrypt::Password.new(self.password) == password)
end

#confirmObject



103
104
105
106
107
108
109
110
111
112
113
# File 'lib/obscured-doorman/models/user.rb', line 103

def confirm
  add_event(type: :confirm, message: 'Confirmation token created', producer: username)
  tokens.where(type: :confirm).destroy
  token = tokens.build(
    type: :confirm,
    token: SecureRandom.uuid,
    expires_at: (DateTime.now + 14.days)
  )
  save
  token
end

#confirm!Object



115
116
117
118
119
120
# File 'lib/obscured-doorman/models/user.rb', line 115

def confirm!
  add_event(type: :confirmation, message: 'Account was successfully confirmed', producer: username)
  self.confirmed = true
  tokens.where(type: :confirm).destroy
  save
end

#forget_me!Object



98
99
100
101
# File 'lib/obscured-doorman/models/user.rb', line 98

def forget_me!
  add_event(type: :remember, message: 'Account set not to be remembered upon login', producer: username)
  tokens.where(type: :remember).destroy
end

#forgot_password!Object



122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/obscured-doorman/models/user.rb', line 122

def forgot_password!
  add_event(type: :password, message: 'Reset password procedure has been started', producer: username)
  tokens.where(type: :password).destroy
  token = tokens.build(
    user: self,
    type: :password,
    token: SecureRandom.uuid,
    expires_at: (DateTime.now + 2.hours)
  )
  save
  token
end

#nameObject



69
70
71
# File 'lib/obscured-doorman/models/user.rb', line 69

def name
  "#{first_name} #{last_name}"
end

#name=(arguments) ⇒ Object



73
74
75
76
# File 'lib/obscured-doorman/models/user.rb', line 73

def name=(arguments)
  self.first_name = arguments[:first_name]
  self.last_name = arguments[:last_name]
end

#remember_me!Object



87
88
89
90
91
92
93
94
95
96
# File 'lib/obscured-doorman/models/user.rb', line 87

def remember_me!
  add_event(type: :remember, message: 'Account set to be remembered upon login', producer: username)
  token = tokens.build(
    type: :remember,
    token: SecureRandom.uuid,
    expires_at: (DateTime.now + Doorman.configuration.remember_for.days)
  )
  save
  token
end

#remembered_password!Object



135
136
137
138
# File 'lib/obscured-doorman/models/user.rb', line 135

def remembered_password!
  add_event(type: :password, message: 'Reset password procedure has been cancelled since successful login was achieved', producer: username)
  tokens.where(type: :password).destroy
end

#reset_password!(password, token) ⇒ Object



140
141
142
143
144
145
146
147
148
# File 'lib/obscured-doorman/models/user.rb', line 140

def reset_password!(password, token)
  token = tokens.find_by(token: token)
  if token && token.type.eql?(:password)
    set_password(password)
    add_event(type: :password, message: 'Password was successfully reset', producer: username)
    return save
  end
  false
end

#set_password(password) ⇒ Object



78
79
80
# File 'lib/obscured-doorman/models/user.rb', line 78

def set_password(password)
  self.password = BCrypt::Password.create(password)
end