Class: Lato::User

Inherits:
ApplicationRecord show all
Includes:
LatoUserApplication
Defined in:
app/models/lato/user.rb

Instance Method Summary collapse

Instance Method Details

#accept_invitation(params) ⇒ Object



218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
# File 'app/models/lato/user.rb', line 218

def accept_invitation(params)
  invitation = Lato::Invitation.find_by(id: params[:id], accepted_code: params[:accepted_code])
  if !invitation || invitation.accepted? || invitation.email != email
    errors.add(:base, :invitation_invalid)
    return
  end

  ActiveRecord::Base.transaction do
    raise ActiveRecord::Rollback unless save && invitation.update(
      accepted_at: Time.now,
      lato_user_id: id
    )

    true
  end
end

#c_email_verification_code(value = nil) ⇒ Object



246
247
248
249
250
251
252
# File 'app/models/lato/user.rb', line 246

def c_email_verification_code(value = nil)
  cache_key = "Lato::User/c_email_verification_code/#{id}"
  return Rails.cache.read(cache_key) if value.nil?

  Rails.cache.write(cache_key, value, expires_in: 30.minutes)
  value
end

#c_email_verification_semaphore(value = nil) ⇒ Object

Cache



238
239
240
241
242
243
244
# File 'app/models/lato/user.rb', line 238

def c_email_verification_semaphore(value = nil)
  cache_key = "Lato::User/c_email_verification_semaphore/#{id}"
  return Rails.cache.read(cache_key) if value.nil?

  Rails.cache.write(cache_key, value, expires_in: 2.minutes)
  value
end

#c_password_update_code(value = nil) ⇒ Object



254
255
256
257
258
259
260
# File 'app/models/lato/user.rb', line 254

def c_password_update_code(value = nil)
  cache_key = "Lato::User/c_password_update_code/#{id}"
  return Rails.cache.read(cache_key) if value.nil?

  Rails.cache.write(cache_key, value, expires_in: 30.minutes)
  value
end

#destroy_with_confirmation(params) ⇒ Object



209
210
211
212
213
214
215
216
# File 'app/models/lato/user.rb', line 209

def destroy_with_confirmation(params)
  unless params[:email_confirmation] == email
    errors.add(:email, :not_correct)
    return
  end

  destroy
end

#full_nameObject

Helpers



57
58
59
# File 'app/models/lato/user.rb', line 57

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

#gravatar_image_url(size = 200) ⇒ Object



61
62
63
# File 'app/models/lato/user.rb', line 61

def gravatar_image_url(size = 200)
  @gravatar_image_url ||= "https://www.gravatar.com/avatar/#{Digest::MD5.hexdigest(email)}?s=#{size}"
end

#request_recover_password(params) ⇒ Object



151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# File 'app/models/lato/user.rb', line 151

def request_recover_password(params)
  user = Lato::User.find_by(email: params[:email])
  unless user
    errors.add(:email, :not_registered)
    return
  end

  code = SecureRandom.hex.upcase
  delivery = Lato::UserMailer.password_update_mail(user.id, code).deliver_now
  unless delivery
    errors.add(:base, :email_sending_error)
    return
  end

  self.id = user.id
  reload

  c_password_update_code(code)

  true
end

#request_verify_emailObject



112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'app/models/lato/user.rb', line 112

def request_verify_email
  if c_email_verification_semaphore
    errors.add(:base, :email_verification_limit)
    return
  end

  code = SecureRandom.hex.upcase
  delivery = Lato::UserMailer.email_verification_mail(id, code).deliver_now
  unless delivery
    errors.add(:base, :email_sending_error)
    return
  end

  c_email_verification_code(code)
  c_email_verification_semaphore(true)

  true
end

#signin(params) ⇒ Object



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'app/models/lato/user.rb', line 83

def (params)
  self.email = params[:email]

  user = Lato::User.find_by(email: params[:email])
  unless user
    errors.add(:email, :not_correct)
    return
  end

  unless user.authenticate(params[:password])
    errors.add(:password, :not_correct)
    return
  end

  self.id = user.id
  reload

  begin
    lato_log_user_signins.create(
      ip_address: params[:ip_address],
      user_agent: params[:user_agent]
    )
  rescue StandardError => e
    Rails.logger.error(e)
  end

  true
end

#signup(params = {}) ⇒ Object

Operations



68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'app/models/lato/user.rb', line 68

def (params = {})
  return unless save

  begin
    lato_log_user_signups.create(
      ip_address: params[:ip_address],
      user_agent: params[:user_agent]
    )
  rescue StandardError => e
    Rails.logger.error(e)
  end

  true
end

#update_accepted_privacy_policy_version(params) ⇒ Object



191
192
193
194
195
196
197
198
# File 'app/models/lato/user.rb', line 191

def update_accepted_privacy_policy_version(params)
  unless params[:confirm]
    errors.add(:base, :privacy_policy_invalid)
    return
  end

  update(accepted_privacy_policy_version: Lato.config.legal_privacy_policy_version)
end

#update_accepted_terms_and_conditions_version(params) ⇒ Object



200
201
202
203
204
205
206
207
# File 'app/models/lato/user.rb', line 200

def update_accepted_terms_and_conditions_version(params)
  unless params[:confirm]
    errors.add(:base, :terms_and_conditions_invalid)
    return
  end

  update(accepted_terms_and_conditions_version: Lato.config.legal_terms_and_conditions_version)
end

#update_password(params) ⇒ Object



173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
# File 'app/models/lato/user.rb', line 173

def update_password(params)
  password_update_code = c_password_update_code

  if password_update_code.blank?
    errors.add(:base, :password_update_code_expired)
    return
  end

  unless password_update_code == params[:code]
    errors.add(:base, :password_update_code_invalid)
    return
  end

  c_password_update_code('')

  update(params.permit(:password, :password_confirmation))
end

#valid_accepted_privacy_policy_version?Boolean

Questions

Returns:

  • (Boolean)


46
47
48
# File 'app/models/lato/user.rb', line 46

def valid_accepted_privacy_policy_version?
  @valid_accepted_privacy_policy_version ||= accepted_privacy_policy_version >= Lato.config.legal_privacy_policy_version
end

#valid_accepted_terms_and_conditions_version?Boolean

Returns:

  • (Boolean)


50
51
52
# File 'app/models/lato/user.rb', line 50

def valid_accepted_terms_and_conditions_version?
  @valid_accepted_terms_and_conditions_version ||= accepted_terms_and_conditions_version >= Lato.config.legal_terms_and_conditions_version
end

#verify_email(params) ⇒ Object



131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'app/models/lato/user.rb', line 131

def verify_email(params)
  email_verification_code = c_email_verification_code

  if email_verification_code.blank?
    errors.add(:base, :email_verification_code_expired)
    return
  end

  unless email_verification_code == params[:code]
    errors.add(:base, :email_verification_code_invalid)
    return
  end

  c_email_verification_code('')
  c_email_verification_semaphore(false)

  update_column(:email_verified_at, Time.now)
  true
end