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
|