app/models/token.rb
7aef87db
 require 'ipaddr'
 
 class Token
 	include Mongoid::Document
 	include Mongoid::Timestamps::Created
 
 	index({ token: 1 })
 
 	field :token, type: String
 	field :date_expiring, type: DateTime
 	field :ip, type: Integer
 
 	def self.authenticate(session)
 		if session[:created_at] == nil
 			return false
 		end
 
 		matched_token = self.where(:token				=> session[:token],
 								   :ip					=> IPAddr.new(session[:ip]).to_i,
 								   :date_expiring.lte	=> session[:created_at] + Rails.application.config.max_lifetime,
 								   :created_at			=> session[:created_at]
 				).limit(1).first
 
 		matched_token
 	end
 
 	def self.save_session(session)
 		date_expiring = session[:created_at] + Rails.application.config.max_lifetime
 
 		self.create!(:token 		=> session[:token],
 					 :date_expiring	=> date_expiring,
 					 :created_at	=> session[:created_at],
 					 :ip			=> IPAddr.new(session[:ip]).to_i)
 	end
 
 	def self.remove_old_session(token)
 		self.delete_all(token: token)
 	end
 
 	private
 
 	def self.generate_token
 		begin
 			token = SecureRandom.urlsafe_base64
 		end while Token.where(token: token).exists?
 
 		token
 	end
 end