Files
MatchLiveTv/backend/app/services/sessions/regia_access.rb
Emiliano Frascaro f4b7be0f80 Billing Stripe, link regia mobile e staff solo trasmissione.
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>
2026-05-29 07:23:13 +02:00

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