module Youtube class OauthState PURPOSE = :youtube_oauth_connect class << self def for_team(team_id:, user_id:) verifier.generate([team_id.to_s, user_id.to_s], expires_in: 1.hour) end def for_platform(admin_id:) verifier.generate(["platform", admin_id.to_s], expires_in: 1.hour) end def verify!(token) payload = verifier.verify(token) case payload when Array if payload.first == "platform" { kind: :platform, admin_id: payload[1] } elsif payload.size == 2 { kind: :team, team_id: payload[0], user_id: payload[1] } else raise ArgumentError, "stato OAuth non valido" end else raise ArgumentError, "stato OAuth non valido" end rescue ActiveSupport::MessageVerifier::InvalidSignature raise ArgumentError, "stato OAuth scaduto o non valido" end private def verifier Rails.application.message_verifier(PURPOSE) end end end end