Aggiunge fatturazione club, pagina regia condivisibile senza account, roster squadre e rimuove la modalità controller dall'app (v1.1.0). Co-authored-by: Cursor <cursoragent@cursor.com>
66 lines
1.4 KiB
Ruby
66 lines
1.4 KiB
Ruby
module Sessions
|
|
class RegiaAccess
|
|
DEFAULT_TTL = 12.hours
|
|
|
|
def initialize(session)
|
|
@session = session
|
|
end
|
|
|
|
# Genera un nuovo link (invalida quello precedente).
|
|
def issue_token!
|
|
rotate!
|
|
end
|
|
|
|
def rotate!
|
|
token = SecureRandom.urlsafe_base64(24)
|
|
expires = [DEFAULT_TTL.from_now, session_end_cap].compact.min
|
|
@session.update!(
|
|
regia_token_digest: digest(token),
|
|
regia_token_expires_at: expires
|
|
)
|
|
token
|
|
end
|
|
|
|
def url(token)
|
|
"#{MatchLiveTv.app_public_url.chomp('/')}/regia/#{token}"
|
|
end
|
|
|
|
def self.find_session_by_token(token)
|
|
return if token.blank?
|
|
|
|
session = StreamSession.find_by(regia_token_digest: digest(token))
|
|
return unless session
|
|
return if session.regia_token_expires_at.blank? || session.regia_token_expires_at.past?
|
|
return if session.terminal?
|
|
|
|
session
|
|
end
|
|
|
|
def self.revoke!(session)
|
|
session.update!(regia_token_digest: nil, regia_token_expires_at: nil)
|
|
end
|
|
|
|
def self.digest(token)
|
|
Digest::SHA256.hexdigest(token.to_s)
|
|
end
|
|
|
|
private
|
|
|
|
def token_valid?
|
|
@session.regia_token_digest.present? &&
|
|
@session.regia_token_expires_at&.future? &&
|
|
!@session.terminal?
|
|
end
|
|
|
|
def session_end_cap
|
|
return nil unless @session.started_at
|
|
|
|
@session.started_at + 8.hours
|
|
end
|
|
|
|
def digest(token)
|
|
self.class.digest(token)
|
|
end
|
|
end
|
|
end
|