@@ -111,6 +111,19 @@ func load(jwt:String) -> LoadResult {
111
111
112
112
// MARK: Validation
113
113
114
+ func validateDate( payload: Payload , key: String , comparison: NSComparisonResult , failure: InvalidToken , decodeError: String ) -> InvalidToken ? {
115
+ if let timestamp = payload [ key] as? NSTimeInterval {
116
+ let date = NSDate ( timeIntervalSince1970: timestamp)
117
+ if date. compare ( NSDate ( ) ) == comparison {
118
+ return failure
119
+ }
120
+ } else if let timestamp: AnyObject = payload [ key] {
121
+ return . DecodeError( decodeError)
122
+ }
123
+
124
+ return nil
125
+ }
126
+
114
127
func validateClaims( payload: Payload , audience: String ? , issuer: String ? ) -> InvalidToken ? {
115
128
if let issuer = issuer {
116
129
if let iss = payload [ " iss " ] as? String {
@@ -122,32 +135,7 @@ func validateClaims(payload:Payload, audience:String?, issuer:String?) -> Invali
122
135
}
123
136
}
124
137
125
- if let exp = payload [ " exp " ] as? NSTimeInterval {
126
- let expiary = NSDate ( timeIntervalSince1970: exp)
127
- if expiary. compare ( NSDate ( ) ) == . OrderedAscending {
128
- return . ExpiredSignature
129
- }
130
- } else if let exp: AnyObject = payload [ " exp " ] {
131
- return . DecodeError( " Expiration time claim (exp) must be an integer " )
132
- }
133
-
134
- if let nbf = payload [ " nbf " ] as? NSTimeInterval {
135
- let date = NSDate ( timeIntervalSince1970: nbf)
136
- if date. compare ( NSDate ( ) ) == . OrderedDescending {
137
- return . ImmatureSignature
138
- }
139
- } else if let nbf: AnyObject = payload [ " nbf " ] {
140
- return . DecodeError( " Not before claim (nbf) must be an integer " )
141
- }
142
-
143
- if let iat = payload [ " iat " ] as? NSTimeInterval {
144
- let date = NSDate ( timeIntervalSince1970: iat)
145
- if date. compare ( NSDate ( ) ) == . OrderedDescending {
146
- return . InvalidIssuedAt
147
- }
148
- } else if let iat: AnyObject = payload [ " iat " ] {
149
- return . DecodeError( " Issued at claim (iat) must be an integer " )
150
- }
151
-
152
- return nil
138
+ return validateDate ( payload, " exp " , . OrderedAscending, . ExpiredSignature, " Expiration time claim (exp) must be an integer " ) ??
139
+ validateDate ( payload, " nbf " , . OrderedDescending, . ImmatureSignature, " Not before claim (nbf) must be an integer " ) ??
140
+ validateDate ( payload, " iat " , . OrderedDescending, . InvalidIssuedAt, " Issued at claim (iat) must be an integer " )
153
141
}
0 commit comments