Created
July 26, 2020 20:16
-
-
Save crspybits/799606143cbd0ba760fc493d2982c13c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// Validate the given refresh token. This does *not* generate a new id token-- the API returns an updated *access token*, which Apple doesn't define a use for (and we don't save). | |
/// On success, updates the lastRefreshTokenValidation. | |
func validateRefreshToken(refreshToken: String, completion: @escaping (Swift.Error?) -> ()) { | |
self.refreshToken = refreshToken | |
let clientSecret:String | |
do { | |
clientSecret = try createClientSecret() | |
} catch let error { | |
completion(error) | |
return | |
} | |
let bodyParameters = "client_id=\(config.clientId)" + "&" + | |
"client_secret=\(clientSecret)" + "&" + | |
"refresh_token=\(refreshToken)" + "&" + | |
"grant_type=refresh_token" | |
let additionalHeaders = ["Content-Type": "application/x-www-form-urlencoded"] | |
apiCall(method: "POST", path: "/auth/token", additionalHeaders:additionalHeaders, body: .string(bodyParameters), expectedSuccessBody: .data) {[weak self] apiResult, statusCode, responseHeaders in | |
guard let self = self else { | |
completion(GenerateTokensError.couldNotGetSelf) | |
return | |
} | |
guard statusCode == HTTPStatusCode.OK else { | |
completion(GenerateTokensError.badStatusCode(statusCode)) | |
return | |
} | |
guard apiResult != nil else { | |
completion(GenerateTokensError.nilAPIResult) | |
return | |
} | |
guard case .data(let data) = apiResult else { | |
completion(GenerateTokensError.noDataInAPIResult) | |
return | |
} | |
let decoder = JSONDecoder() | |
do { | |
_ = try decoder.decode(RefreshIdTokenResult.self, from: data) | |
} catch let error { | |
Log.error("\(error)") | |
completion(GenerateTokensError.couldNotDecodeResult) | |
return | |
} | |
self.lastRefreshTokenValidation = Date() | |
guard let delegate = self.delegate else { | |
Log.warning("No delegate!") | |
completion(nil) | |
return | |
} | |
guard delegate.saveToDatabase(account: self) else { | |
completion(GenerateTokensError.errorSavingCredsToDatabase) | |
return | |
} | |
completion(nil) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment