Class: BetterAuth::SessionStore

Inherits:
Object
  • Object
show all
Defined in:
lib/better_auth/session_store.rb

Defined Under Namespace

Classes: CookieValue

Constant Summary collapse

4096
200
CHUNK_SIZE =
ALLOWED_COOKIE_SIZE - ESTIMATED_EMPTY_COOKIE_SIZE

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cookie_name, cookie_options, context) ⇒ SessionStore

Returns a new instance of SessionStore.



13
14
15
16
17
18
# File 'lib/better_auth/session_store.rb', line 13

def initialize(cookie_name, cookie_options, context)
  @cookie_name = cookie_name
  @cookie_options = cookie_options || {}
  @context = context
  @chunks = read_existing_chunks
end

Instance Attribute Details

#chunksObject (readonly)

Returns the value of attribute chunks.



11
12
13
# File 'lib/better_auth/session_store.rb', line 11

def chunks
  @chunks
end

#contextObject (readonly)

Returns the value of attribute context.



11
12
13
# File 'lib/better_auth/session_store.rb', line 11

def context
  @context
end

Returns the value of attribute cookie_name.



11
12
13
# File 'lib/better_auth/session_store.rb', line 11

def cookie_name
  @cookie_name
end

Returns the value of attribute cookie_options.



11
12
13
# File 'lib/better_auth/session_store.rb', line 11

def cookie_options
  @cookie_options
end

Class Method Details

.chunk_index(cookie_name) ⇒ Object



64
65
66
67
68
# File 'lib/better_auth/session_store.rb', line 64

def self.chunk_index(cookie_name)
  Integer(cookie_name.split(".").last)
rescue ArgumentError, TypeError
  0
end


48
49
50
51
52
53
54
55
56
57
58
# File 'lib/better_auth/session_store.rb', line 48

def self.get_chunked_cookie(context, cookie_name)
  direct = context.get_cookie(cookie_name)
  return direct if direct && !direct.empty?

  chunks = context.cookies.each_with_object({}) do |(name, value), result|
    result[name] = value if name.start_with?("#{cookie_name}.")
  end
  return nil if chunks.empty?

  join_chunks(chunks)
end

.join_chunks(chunks) ⇒ Object



60
61
62
# File 'lib/better_auth/session_store.rb', line 60

def self.join_chunks(chunks)
  chunks.keys.sort_by { |name| chunk_index(name) }.map { |name| chunks[name] }.join
end

Instance Method Details

#chunk(value, options = {}) ⇒ Object



28
29
30
31
32
# File 'lib/better_auth/session_store.rb', line 28

def chunk(value, options = {})
  cleaned = clean
  new_chunks = build_chunks(value.to_s, cookie_options.merge(options || {}))
  cleaned + new_chunks
end

#chunks?Boolean

Returns:

  • (Boolean)


24
25
26
# File 'lib/better_auth/session_store.rb', line 24

def chunks?
  !chunks.empty?
end

#cleanObject



34
35
36
37
38
39
40
# File 'lib/better_auth/session_store.rb', line 34

def clean
  existing = chunks.keys.map do |name|
    CookieValue.new(name: name, value: "", attributes: cookie_options.merge(max_age: 0))
  end
  chunks.clear
  existing
end

#set_cookies(cookies) ⇒ Object



42
43
44
45
46
# File 'lib/better_auth/session_store.rb', line 42

def set_cookies(cookies)
  cookies.each do |cookie|
    context.set_cookie(cookie.name, cookie.value, cookie.attributes)
  end
end

#valueObject



20
21
22
# File 'lib/better_auth/session_store.rb', line 20

def value
  self.class.join_chunks(chunks)
end