Skip to content

Commit 087e6e7

Browse files
committed
refactor: Move payload deseriaisation to decoder
1 parent 7154710 commit 087e6e7

File tree

2 files changed

+17
-11
lines changed

2 files changed

+17
-11
lines changed

Sources/JWT/CompactJSONDecoder.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import Foundation
2+
13
class CompactJSONDecoder: JSONDecoder {
24
override func decode<T>(_ type: T.Type, from data: Data) throws -> T where T : Decodable {
35
guard let string = String(data: data, encoding: .ascii) else {
@@ -14,4 +16,17 @@ class CompactJSONDecoder: JSONDecoder {
1416

1517
return try super.decode(type, from: decoded)
1618
}
19+
20+
func decode(from string: String) throws -> Payload {
21+
guard let decoded = base64decode(string) else {
22+
throw InvalidToken.decodeError("Payload is not correctly encoded as base64")
23+
}
24+
25+
let object = try JSONSerialization.jsonObject(with: decoded)
26+
guard let payload = object as? Payload else {
27+
throw InvalidToken.decodeError("Invalid payload")
28+
}
29+
30+
return payload
31+
}
1732
}

Sources/JWT/Decode.swift

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -90,22 +90,13 @@ func load(_ jwt: String) throws -> (header: JOSEHeader, payload: ClaimSet, signa
9090

9191
let decoder = CompactJSONDecoder()
9292
let header = try decoder.decode(JOSEHeader.self, from: headerSegment)
93-
94-
let payloadData = base64decode(payloadSegment)
95-
if payloadData == nil {
96-
throw InvalidToken.decodeError("Payload is not correctly encoded as base64")
97-
}
98-
99-
let payload = (try? JSONSerialization.jsonObject(with: payloadData!, options: JSONSerialization.ReadingOptions(rawValue: 0))) as? Payload
100-
if payload == nil {
101-
throw InvalidToken.decodeError("Invalid payload")
102-
}
93+
let payload = try decoder.decode(from: payloadSegment)
10394

10495
guard let signature = base64decode(signatureSegment) else {
10596
throw InvalidToken.decodeError("Signature is not correctly encoded as base64")
10697
}
10798

108-
return (header: header, payload: ClaimSet(claims: payload!), signature: signature, signatureInput: signatureInput)
99+
return (header: header, payload: ClaimSet(claims: payload), signature: signature, signatureInput: signatureInput)
109100
}
110101

111102
// MARK: Signature Verification

0 commit comments

Comments
 (0)