Class: Himari::SessionData

Inherits:
Object
  • Object
show all
Includes:
TokenString
Defined in:
lib/himari/session_data.rb

Instance Attribute Summary collapse

Attributes included from TokenString

#verification

Class Method Summary collapse

Instance Method Summary collapse

Methods included from TokenString

#expiry, #format, #handle, hash_secret, included, #magic_header, #secret, #secret_hash, #secret_hash_prev, #verify!, #verify_expiry!, #verify_secret!

Constructor Details

#initialize(claims: {}, user_data: {}, refresh_info: nil, handle:, secret: nil, secret_hash: nil, expiry: nil) ⇒ SessionData

Returns a new instance of SessionData.



9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/himari/session_data.rb', line 9

def initialize(claims: {}, user_data: {}, refresh_info: nil, handle:, secret: nil, secret_hash: nil, expiry: nil)
  @claims = claims
  @user_data = user_data
  @refresh_info = refresh_info

  @handle = handle
  @secret = secret
  @secret_hash = secret_hash
  @secret_hash_prev = nil
  @expiry = expiry
  @verification = nil
end

Instance Attribute Details

#claimsObject (readonly)

Returns the value of attribute claims.



30
31
32
# File 'lib/himari/session_data.rb', line 30

def claims
  @claims
end

#refresh_infoObject (readonly)

Returns the value of attribute refresh_info.



30
31
32
# File 'lib/himari/session_data.rb', line 30

def refresh_info
  @refresh_info
end

#user_dataObject (readonly)

Returns the value of attribute user_data.



30
31
32
# File 'lib/himari/session_data.rb', line 30

def user_data
  @user_data
end

Class Method Details

.default_lifetimeObject



26
27
28
# File 'lib/himari/session_data.rb', line 26

def self.default_lifetime
  3600
end

.magic_headerObject



22
23
24
# File 'lib/himari/session_data.rb', line 22

def self.magic_header
  'hmas'
end

Instance Method Details

#active?(now: Time.now) ⇒ Boolean

Returns:

  • (Boolean)


36
37
38
# File 'lib/himari/session_data.rb', line 36

def active?(now: Time.now)
  @expiry.nil? || @expiry > now.to_i
end

#as_jsonObject



63
64
65
66
67
68
69
70
71
72
73
# File 'lib/himari/session_data.rb', line 63

def as_json
  {
    handle: handle,
    secret_hash: secret_hash,
    expiry: expiry,

    claims: claims,
    user_data: user_data,
    refresh_info: refresh_info,
  }
end

#as_logObject



54
55
56
57
58
59
60
61
# File 'lib/himari/session_data.rb', line 54

def as_log
  {
    handle: handle,
    claims: claims,
    expiry: expiry,
    refreshable: refreshable?,
  }
end

#refreshable?Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/himari/session_data.rb', line 32

def refreshable?
  !@refresh_info.nil?
end

#with(claims: @claims, user_data: @user_data, refresh_info: @refresh_info, expiry: @expiry) ⇒ Object

Return a copy with selected fields replaced. Reads @secret directly to sidestep TokenString#secret raising SecretMissing for storage-loaded sessions.



42
43
44
45
46
47
48
49
50
51
52
# File 'lib/himari/session_data.rb', line 42

def with(claims: @claims, user_data: @user_data, refresh_info: @refresh_info, expiry: @expiry)
  self.class.new(
    handle: @handle,
    secret: @secret,
    secret_hash: @secret_hash,
    expiry: expiry,
    claims: claims,
    user_data: user_data,
    refresh_info: refresh_info,
  )
end