* feat: Revocable sessions * fix: Tests using sign_in * feat: Configuration entry for the maximum number of session activations
		
			
				
	
	
		
			39 lines
		
	
	
		
			840 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			840 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
# == Schema Information
 | 
						|
#
 | 
						|
# Table name: session_activations
 | 
						|
#
 | 
						|
#  id         :integer          not null, primary key
 | 
						|
#  user_id    :integer          not null
 | 
						|
#  session_id :string           not null
 | 
						|
#  created_at :datetime         not null
 | 
						|
#  updated_at :datetime         not null
 | 
						|
#
 | 
						|
 | 
						|
class SessionActivation < ApplicationRecord
 | 
						|
  LIMIT = Rails.configuration.x.max_session_activations
 | 
						|
 | 
						|
  def self.active?(id)
 | 
						|
    id && where(session_id: id).exists?
 | 
						|
  end
 | 
						|
 | 
						|
  def self.activate(id)
 | 
						|
    activation = create!(session_id: id)
 | 
						|
    purge_old
 | 
						|
    activation
 | 
						|
  end
 | 
						|
 | 
						|
  def self.deactivate(id)
 | 
						|
    return unless id
 | 
						|
    where(session_id: id).destroy_all
 | 
						|
  end
 | 
						|
 | 
						|
  def self.purge_old
 | 
						|
    order('created_at desc').offset(LIMIT).destroy_all
 | 
						|
  end
 | 
						|
 | 
						|
  def self.exclusive(id)
 | 
						|
    where('session_id != ?', id).destroy_all
 | 
						|
  end
 | 
						|
end
 |