mirror of
https://github.com/internetee/registry.git
synced 2025-06-05 20:27:30 +02:00
43 lines
1 KiB
Ruby
43 lines
1 KiB
Ruby
class EppSession < ApplicationRecord
|
|
belongs_to :user, required: true
|
|
|
|
validates :session_id, uniqueness: true, presence: true
|
|
|
|
class_attribute :timeout
|
|
self.timeout = (ENV['epp_session_timeout_seconds'] || 300).to_i.seconds
|
|
|
|
class_attribute :sessions_per_registrar
|
|
self.sessions_per_registrar = (ENV['epp_sessions_per_registrar'] || 4).to_i
|
|
|
|
alias_attribute :last_access, :updated_at
|
|
|
|
scope :not_expired,
|
|
lambda {
|
|
where(':now <= (updated_at + interval :interval)', now: Time.zone.now, interval: interval)
|
|
}
|
|
|
|
def self.limit_reached?(registrar)
|
|
count = where(user_id: registrar.api_users.ids).not_expired.count
|
|
count >= sessions_per_registrar
|
|
end
|
|
|
|
def self.interval
|
|
"#{timeout.parts.first.second} #{timeout.parts.first.first}"
|
|
end
|
|
|
|
def self.expired
|
|
where(':now > (updated_at + interval :interval)', now: Time.zone.now, interval: interval)
|
|
end
|
|
|
|
def update_last_access
|
|
touch
|
|
end
|
|
|
|
def timed_out?
|
|
(updated_at + self.class.timeout).past?
|
|
end
|
|
|
|
def expired?
|
|
timed_out?
|
|
end
|
|
end
|