Skip to content

Commit

Permalink
Add support for expired Twitter tokens
Browse files Browse the repository at this point in the history
  • Loading branch information
deyton committed Jan 23, 2020
1 parent 287b433 commit 7354314
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 0 deletions.
14 changes: 14 additions & 0 deletions OAuthSwiftTests/OAuthSwiftErrorTest.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,20 @@ class OAuthSwiftErrorTest: XCTestCase {
XCTAssertTrue(((error as Error) as NSError).isExpiredToken)
}

func testDetectInvalidTokenFromTwitter() {
// given
let userInfo = [
NSURLErrorFailingURLErrorKey: "https://api.twitter.com/1.1/account/verify_credentials.json",
"Response-Body": "{\"errors\":[{\"code\":89,\"message\":\"Invalid or expired token.\"}]}"
]
// Twitter error details are here: https://developer.twitter.com/en/docs/basics/response-codes
let error = NSError(domain: OAuthSwiftError.Domain, code: 401, userInfo: userInfo)

// assert
XCTAssertTrue(error.isExpiredToken)
XCTAssertTrue(((error as Error) as NSError).isExpiredToken)
}

func testDetectInvalidTokensFromFacebook() {
// given
let createUserInfo = { (errorCode: Int, errorSubCode: Int?) -> [String:Any] in
Expand Down
4 changes: 4 additions & 0 deletions Sources/NSError+OAuthSwift.swift
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ public extension NSError {
for error in errors {
if let errorType = error["errorType"] as? String, errorType == "invalid_token" || errorType == "expired_token" {
return true
} else if let urlString = self.userInfo[NSURLErrorFailingURLErrorKey] as? String, urlString.contains("api.twitter.com"), let errorCode = error["code"] as? Int, errorCode == 89 {
// This is the code for expired or invalid twitter token
// see: https://developer.twitter.com/en/docs/basics/response-codes
return true
}
}
}
Expand Down

0 comments on commit 7354314

Please sign in to comment.