Class: TurboPresence::RoomToken

Inherits:
Object
  • Object
show all
Defined in:
lib/turbo_presence/room_token.rb

Defined Under Namespace

Classes: InvalidToken

Class Method Summary collapse

Class Method Details

.generate(record) ⇒ Object



12
13
14
15
16
17
# File 'lib/turbo_presence/room_token.rb', line 12

def generate(record)
  payload = { m: record.class.name, i: record.id.to_s }
  json    = JSON.generate(payload)
  sig     = sign(json)
  Base64.urlsafe_encode64("#{json}.#{sig}", padding: false)
end

.verify!(token) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/turbo_presence/room_token.rb', line 19

def verify!(token)
  raw            = Base64.urlsafe_decode64(token).force_encoding("UTF-8")
  last_dot       = raw.rindex(".")
  raise InvalidToken, "malformed token" unless last_dot

  json = raw[0, last_dot]
  sig  = raw[(last_dot + 1)..]

  raise InvalidToken, "invalid signature" unless secure_compare(sign(json), sig)

  payload = JSON.parse(json)
  raise InvalidToken, "malformed payload" unless payload["m"] && payload["i"]

  [payload["m"], payload["i"]]
rescue ArgumentError, JSON::ParserError
  raise InvalidToken, "invalid token"
end