Class: Philiprehberger::JwtKit::Revocation::MemoryStore

Inherits:
Object
  • Object
show all
Defined in:
lib/philiprehberger/jwt_kit/revocation.rb

Overview

Thread-safe in-memory revocation store backed by a Hash.

Instance Method Summary collapse

Constructor Details

#initializeMemoryStore

Returns a new instance of MemoryStore.



9
10
11
12
# File 'lib/philiprehberger/jwt_kit/revocation.rb', line 9

def initialize
  @revoked = {}
  @mutex = Mutex.new
end

Instance Method Details

#cleanup!(max_age:) ⇒ self

Removes revocation entries older than max_age seconds.

Parameters:

  • max_age (Integer)

    maximum age in seconds

Returns:

  • (self)


54
55
56
57
58
# File 'lib/philiprehberger/jwt_kit/revocation.rb', line 54

def cleanup!(max_age:)
  cutoff = Time.now.to_i - max_age
  @mutex.synchronize { @revoked.reject! { |_jti, ts| ts < cutoff } }
  self
end

#clearvoid

This method returns an undefined value.

Clears all revoked tokens.



39
40
41
# File 'lib/philiprehberger/jwt_kit/revocation.rb', line 39

def clear
  @mutex.synchronize { @revoked.clear }
end

#revoke(token) ⇒ void

This method returns an undefined value.

Revokes a token by extracting and storing its JTI.

Parameters:

  • token (String)

    JWT token to revoke



18
19
20
21
22
23
# File 'lib/philiprehberger/jwt_kit/revocation.rb', line 18

def revoke(token)
  jti = extract_jti(token)
  return unless jti

  @mutex.synchronize { @revoked[jti] = Time.now.to_i }
end

#revoked?(token) ⇒ Boolean

Checks whether a token has been revoked.

Parameters:

  • token (String)

    JWT token to check

Returns:

  • (Boolean)

    true if the token has been revoked



29
30
31
32
33
34
# File 'lib/philiprehberger/jwt_kit/revocation.rb', line 29

def revoked?(token)
  jti = extract_jti(token)
  return false unless jti

  @mutex.synchronize { @revoked.key?(jti) }
end

#sizeInteger

Returns the number of revoked tokens.

Returns:

  • (Integer)


46
47
48
# File 'lib/philiprehberger/jwt_kit/revocation.rb', line 46

def size
  @mutex.synchronize { @revoked.size }
end