Class: Xolo::Admin::CookieJar

Inherits:
Faraday::Middleware
  • Object
show all
Defined in:
lib/xolo/admin/cookie_jar.rb

Overview

Faraday Middleware for storing and sending the only cookie we use with the Xolo server.

See lostisland.github.io/faraday/#/middleware/custom-middleware

Constant Summary collapse

'Cookie'
'set-cookie'
'rack.session'
'expires'

Class Attribute Summary collapse

Instance Method Summary collapse

Class Attribute Details

runtime storage for our single cookie



38
39
40
# File 'lib/xolo/admin/cookie_jar.rb', line 38

def session_cookie
  @session_cookie
end

.session_expiresObject

runtime storage for our single cookie



38
39
40
# File 'lib/xolo/admin/cookie_jar.rb', line 38

def session_expires
  @session_expires
end

Instance Method Details

#on_complete(env) ⇒ Object

The server only ever sends one cookie, and we only care about 2 values: rack.session, and expires



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/xolo/admin/cookie_jar.rb', line 61

def on_complete(env)
  raw_cookie = env[:response_headers][SET_COOKIE_HEADER]
  return unless raw_cookie

  tepid_cookie = raw_cookie.split(Xolo::SEMICOLON_SEP_RE)
  tepid_cookie.each do |part|
    name, value = part.split('=')
    case name
    when SESSION_COOKIE_NAME
      self.class.session_cookie = value
    when SESSION_COOKIE_EXPIRES_NAME
      self.class.session_expires = Time.parse(value).localtime
    end
  end
end

#on_request(env) ⇒ Object

we only send back the rack.session cookie, as long as it exists and hasn’t expired (it lasts an hour)



49
50
51
52
53
54
55
# File 'lib/xolo/admin/cookie_jar.rb', line 49

def on_request(env)
  return unless self.class.session_cookie && self.class.session_expires

  raise Xolo::InvalidTokenError, 'Server Session Expired' if Time.now > self.class.session_expires

  env[:request_headers][COOKIE_HEADER] = "#{SESSION_COOKIE_NAME}=#{self.class.session_cookie}"
end