* 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
 |