Skip to content

Commit 5ada2f3

Browse files
siemensikkemakylef
authored andcommitted
refactor: Use guard where possible
1 parent 23e575c commit 5ada2f3

File tree

2 files changed

+20
-20
lines changed

2 files changed

+20
-20
lines changed

Sources/Claims.swift

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,32 @@
11
import Foundation
22

3-
func validateClaims(_ payload:Payload, audience:String?, issuer:String?) throws {
3+
func validateClaims(_ payload: Payload, audience: String?, issuer: String?) throws {
44
try validateIssuer(payload, issuer: issuer)
55
try validateAudience(payload, audience: audience)
66
try validateDate(payload, key: "exp", comparison: .orderedAscending, failure: .expiredSignature, decodeError: "Expiration time claim (exp) must be an integer")
77
try validateDate(payload, key: "nbf", comparison: .orderedDescending, failure: .immatureSignature, decodeError: "Not before claim (nbf) must be an integer")
88
try validateDate(payload, key: "iat", comparison: .orderedDescending, failure: .invalidIssuedAt, decodeError: "Issued at claim (iat) must be an integer")
99
}
1010

11-
func validateAudience(_ payload:Payload, audience:String?) throws {
12-
if let audience = audience {
13-
if let aud = payload["aud"] as? [String] {
14-
if !aud.contains(audience) {
15-
throw InvalidToken.invalidAudience
16-
}
17-
} else if let aud = payload["aud"] as? String {
18-
if aud != audience {
19-
throw InvalidToken.invalidAudience
20-
}
21-
} else {
22-
throw InvalidToken.decodeError("Invalid audience claim, must be a string or an array of strings")
11+
func validateAudience(_ payload: Payload, audience: String?) throws {
12+
guard let audience = audience else {
13+
return
14+
}
15+
16+
if let aud = payload["aud"] as? [String] {
17+
if !aud.contains(audience) {
18+
throw InvalidToken.invalidAudience
19+
}
20+
} else if let aud = payload["aud"] as? String {
21+
if aud != audience {
22+
throw InvalidToken.invalidAudience
2323
}
24+
} else {
25+
throw InvalidToken.decodeError("Invalid audience claim, must be a string or an array of strings")
2426
}
2527
}
2628

27-
func validateIssuer(_ payload:Payload, issuer:String?) throws {
29+
func validateIssuer(_ payload: Payload, issuer: String?) throws {
2830
if let issuer = issuer {
2931
if let iss = payload["iss"] as? String {
3032
if iss != issuer {

Sources/Decode.swift

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,11 @@ func load(_ jwt:String) throws -> (header: Payload, payload: Payload, signature:
7575
let signatureSegment = segments[2]
7676
let signatureInput = "\(headerSegment).\(payloadSegment)"
7777

78-
let headerData = base64decode(headerSegment)
79-
if headerData == nil {
78+
guard let headerData = base64decode(headerSegment) else {
8079
throw InvalidToken.decodeError("Header is not correctly encoded as base64")
8180
}
8281

83-
let header = (try? JSONSerialization.jsonObject(with: headerData!, options: JSONSerialization.ReadingOptions(rawValue: 0))) as? Payload
82+
let header = (try? JSONSerialization.jsonObject(with: headerData, options: JSONSerialization.ReadingOptions(rawValue: 0))) as? Payload
8483
if header == nil {
8584
throw InvalidToken.decodeError("Invalid header")
8685
}
@@ -95,12 +94,11 @@ func load(_ jwt:String) throws -> (header: Payload, payload: Payload, signature:
9594
throw InvalidToken.decodeError("Invalid payload")
9695
}
9796

98-
let signature = base64decode(signatureSegment)
99-
if signature == nil {
97+
guard let signature = base64decode(signatureSegment) else {
10098
throw InvalidToken.decodeError("Signature is not correctly encoded as base64")
10199
}
102100

103-
return (header: header!, payload: payload!, signature: signature!, signatureInput: signatureInput)
101+
return (header: header!, payload: payload!, signature: signature, signatureInput: signatureInput)
104102
}
105103

106104
// MARK: Signature Verification

0 commit comments

Comments
 (0)