46 lines
1.3 KiB
Ruby
46 lines
1.3 KiB
Ruby
class User < ApplicationRecord
|
|
has_secure_password
|
|
has_many :jobs_as_costumer, foreign_key: :costumer_id, class_name: "Job"
|
|
has_many :jobs_as_operator, foreign_key: :operator_id, class_name: "Job"
|
|
|
|
generates_token_for :email_verification, expires_in: 2.days do
|
|
email
|
|
end
|
|
generates_token_for :password_reset, expires_in: 20.minutes do
|
|
password_salt.last(10)
|
|
end
|
|
|
|
has_many :sessions, dependent: :destroy
|
|
|
|
# validates :email, presence: true, uniqueness: true, format: { with: URI::MailTo::EMAIL_REGEXP }
|
|
validates :email, presence: true, uniqueness: true,
|
|
format: { with: /\b[A-Z0-9._%a-z\-]+@(student\.|)hs\-rm\.de\z/, message: "must be a student.hs-rm.de or hs-rm.de email" }
|
|
|
|
validates :password, allow_nil: true, length: { minimum: 12 }
|
|
# validates :password, not_pwned: { message: "might easily be guessed" }
|
|
|
|
validates_presence_of :firstname, :lastname
|
|
|
|
normalizes :email, with: -> { _1.strip.downcase }
|
|
|
|
AVAILABLE_ROLES = [ :user, :operator, :admin ]
|
|
|
|
enum :role, {
|
|
user: "user",
|
|
operator: "operator",
|
|
admin: "admin"
|
|
}
|
|
|
|
before_validation if: :email_changed?, on: :update do
|
|
self.verified = false
|
|
end
|
|
|
|
after_update if: :password_digest_previously_changed? do
|
|
sessions.where.not(id: Current.session).delete_all
|
|
end
|
|
|
|
def name
|
|
[ firstname, " ", lastname ].join
|
|
end
|
|
end
|