Module: RobustServerSocket::Modules::ReplayAttackProtection

Defined in:
lib/robust_server_socket/modules/replay_attack_protection.rb

Constant Summary collapse

UsedToken =
Class.new(StandardError)
StaleToken =
Class.new(StandardError)

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(_base) ⇒ Object



9
10
11
12
# File 'lib/robust_server_socket/modules/replay_attack_protection.rb', line 9

def self.included(_base)
  RobustServerSocket._push_modules_check_code('atomic_validate_and_log_token')
  RobustServerSocket._push_bang_modules_check_code("atomic_validate_and_log_token!\n")
end

Instance Method Details

#atomic_validate_and_log_tokenObject



34
35
36
37
38
39
40
41
# File 'lib/robust_server_socket/modules/replay_attack_protection.rb', line 34

def atomic_validate_and_log_token
  Cacher.atomic_validate_and_log(
    decrypted_token,
    store_used_token_time, # window for storing used token
    timestamp,
    token_expiration_time
  ) == 'ok'
end

#atomic_validate_and_log_token!Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/robust_server_socket/modules/replay_attack_protection.rb', line 14

def atomic_validate_and_log_token!
  result = Cacher.atomic_validate_and_log(
    decrypted_token,
    store_used_token_time,
    timestamp,
    token_expiration_time
  )

  case result
    when 'ok'
      true
    when 'stale'
      raise StaleToken
    when 'used'
      raise UsedToken
    else
      raise StandardError, "Unexpected result: #{result}"
    end
end