Class: CookieManager

Inherits:
Object
  • Object
show all
Defined in:
lib/uber_login/cookie_manager.rb

Overview

This class handles the :uid and :ulogin cookies It builds and sets the cookies, clears them, checks for their validity.

Instance Method Summary collapse

Constructor Details

#initialize(cookies, request) ⇒ CookieManager

Returns a new instance of CookieManager.



5
6
7
8
9
10
11
12
# File 'lib/uber_login/cookie_manager.rb', line 5

def initialize(cookies, request)
  @cookies = cookies
  @request = request
  @validity_checks = [ :token_match ]

  @validity_checks << :ip_equality if UberLogin.configuration.tie_tokens_to_ip
  @validity_checks << :expiration if UberLogin.configuration.token_expiration
end

Instance Method Details

#clearObject

Clears :uid and :ulogin cookies



16
17
18
19
# File 'lib/uber_login/cookie_manager.rb', line 16

def clear
  @cookies.delete :uid
  @cookies.delete :ulogin
end

#expiration(row) ⇒ Object



63
64
65
# File 'lib/uber_login/cookie_manager.rb', line 63

def expiration(row)
  row.updated_at >= Time.now - UberLogin.configuration.token_expiration
end

#hashed_tokenObject



28
29
30
# File 'lib/uber_login/cookie_manager.rb', line 28

def hashed_token
  BCrypt::Password.create(token).to_s
end

#ip_equality(row) ⇒ Object



59
60
61
# File 'lib/uber_login/cookie_manager.rb', line 59

def ip_equality(row)
  row.ip_address == @request.remote_ip
end

#persistent_login(uid, sequence, token) ⇒ Object



32
33
34
35
# File 'lib/uber_login/cookie_manager.rb', line 32

def (uid, sequence, token)
  @cookies.permanent[:uid] = uid
  @cookies.permanent[:ulogin] = ulogin_cookie(sequence, token)
end

#sequenceObject



45
46
47
# File 'lib/uber_login/cookie_manager.rb', line 45

def sequence
  sequence_and_token[0]
end

#sequence_and_tokenObject



41
42
43
# File 'lib/uber_login/cookie_manager.rb', line 41

def sequence_and_token
  @cookies[:ulogin].split(':')
end

#tokenObject



49
50
51
# File 'lib/uber_login/cookie_manager.rb', line 49

def token
  sequence_and_token[1]
end

#token_match(row) ⇒ Object

Validity checks



55
56
57
# File 'lib/uber_login/cookie_manager.rb', line 55

def token_match(row)
  BCrypt::Password.new(row.token) == token
end


37
38
39
# File 'lib/uber_login/cookie_manager.rb', line 37

def ulogin_cookie(sequence, token)
  sequence + ':' + token
end

#valid?Boolean

Returns:

  • (Boolean)


21
22
23
24
25
26
# File 'lib/uber_login/cookie_manager.rb', line 21

def valid?
  token_row = LoginToken.find_by(uid: @cookies[:uid], sequence: sequence)
  @validity_checks.all? { |check| send(check, token_row) }
rescue
  false
end