Skip to content

Commit 56b7915

Browse files
committed
fix: improve error messages on newer crystal versions
1 parent 0e87fd2 commit 56b7915

File tree

1 file changed

+16
-14
lines changed

1 file changed

+16
-14
lines changed

src/jwt.cr

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -241,16 +241,16 @@ module JWT
241241
end
242242

243243
private def validate_aud!(payload, aud)
244-
if !payload["aud"]?
244+
payload_aud = payload["aud"]?
245+
if !payload_aud
245246
raise InvalidAudienceError.new("Invalid audience (aud). Expected #{aud.inspect}, received nothing")
246-
elsif payload["aud"].as_s?
247-
unless Crypto::Subtle.constant_time_compare(aud.to_s, payload["aud"].as_s)
248-
raise InvalidAudienceError.new("Invalid audience (aud). Expected #{aud.inspect}, received #{payload["aud"].inspect}")
247+
elsif payload_aud.as_s?
248+
unless Crypto::Subtle.constant_time_compare(aud.to_s, payload_aud.as_s)
249+
raise InvalidAudienceError.new("Invalid audience (aud). Expected #{aud.inspect}, received #{payload_aud.raw.inspect}")
249250
end
250-
elsif payload["aud"].as_a?
251-
auds = payload["aud"].as_a
251+
elsif auds = payload_aud.as_a?
252252
if !auds.includes?(aud)
253-
msg = "Invalid audience (aud). Expected #{aud.inspect}, received #{payload["aud"].inspect}"
253+
msg = "Invalid audience (aud). Expected #{aud.inspect}, received #{auds.inspect}"
254254
raise InvalidAudienceError.new(msg)
255255
end
256256
else
@@ -259,17 +259,19 @@ module JWT
259259
end
260260

261261
private def validate_iss!(payload, iss)
262-
if !payload["iss"]?
262+
payload_iss = payload["iss"]?
263+
if !payload_iss
263264
raise InvalidIssuerError.new("Invalid issuer (iss). Expected #{iss.inspect}, received nothing")
264-
elsif !Crypto::Subtle.constant_time_compare(iss.to_s, payload["iss"].to_s)
265-
raise InvalidIssuerError.new("Invalid issuer (iss). Expected #{iss.inspect}, received #{payload["iss"].inspect}")
265+
elsif !Crypto::Subtle.constant_time_compare(iss.to_s, payload_iss.to_s)
266+
raise InvalidIssuerError.new("Invalid issuer (iss). Expected #{iss.inspect}, received #{payload_iss.raw.inspect}")
266267
end
267268
end
268269

269270
private def validate_sub!(payload, sub)
270-
if payload["sub"]?
271-
unless Crypto::Subtle.constant_time_compare(sub.to_s, payload["sub"].to_s)
272-
raise InvalidSubjectError.new("Invalid subject (sub). Expected #{sub.inspect}, received #{payload["sub"].inspect}")
271+
payload_sub = payload["sub"]?
272+
if payload_sub
273+
unless Crypto::Subtle.constant_time_compare(sub.to_s, payload_sub.to_s)
274+
raise InvalidSubjectError.new("Invalid subject (sub). Expected #{sub.inspect}, received #{payload_sub.raw.inspect}")
273275
end
274276
else
275277
raise InvalidSubjectError.new("Invalid subject (sub). Expected #{sub.inspect}, received nothing")
@@ -281,7 +283,7 @@ module JWT
281283
if !header_typ
282284
raise InvalidTypError.new("Invalid type (typ). Expected #{typ.inspect}, received nothing")
283285
elsif !Crypto::Subtle.constant_time_compare(typ.to_s, header_typ.to_s)
284-
raise InvalidTypError.new("Invalid type (typ). Expected #{typ.inspect}, received #{header_typ.inspect}")
286+
raise InvalidTypError.new("Invalid type (typ). Expected #{typ.inspect}, received #{header_typ.raw.inspect}")
285287
end
286288
end
287289

0 commit comments

Comments
 (0)