Skip to content

Commit 4555d24

Browse files
committed
Change internal refresh token logic.
1 parent 28c20cc commit 4555d24

File tree

4 files changed

+27
-11
lines changed

4 files changed

+27
-11
lines changed

Source/Core/API/Account/INPAccountService.swift

+1
Original file line numberDiff line numberDiff line change
@@ -488,6 +488,7 @@ private enum AccountAPIRouter: INPAPIConfiguration {
488488
.forgotPassword,
489489
.authenticate,
490490
.authenticateClientCredentials,
491+
.refreshToken,
491492
.getRegisterFields,
492493
.getSocialURLs:
493494
return false

Source/Core/API/INPAuthHandler.swift

+18-8
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,7 @@ final class INPAuthHandler: RequestInterceptor {
3434
var adaptedRequest = urlRequest
3535
if let authenticationType = adaptedRequest.value(forHTTPHeaderField: NetworkConstants.HeaderParameters.authenticationType),
3636
authenticationType == NetworkConstants.HeaderParameters.refreshToken {
37-
completion(.success(adaptedRequest))
38-
return
37+
return completion(.success(adaptedRequest))
3938
}
4039
guard
4140
let accessToken = InPlayer.Account.getCredentials()?.accessToken,
@@ -63,13 +62,24 @@ final class INPAuthHandler: RequestInterceptor {
6362
else {
6463
return completion(.doNotRetry)
6564
}
66-
requestToRetry.append(completion)
65+
66+
if let credentials = InPlayer.Account.getCredentials() {
67+
if Date().timeIntervalSince1970.isLess(than: credentials.expires) {
68+
69+
// token is not expired, but invalidated. Remove from storage and do not retry
70+
InPlayer.Account.removeCredentials()
71+
72+
return completion(.doNotRetry)
73+
} else {
74+
requestToRetry.append(completion)
6775

68-
if !isRefreshing {
69-
refreshTokens { [weak self] (succeeded, accessToken, refreshToken) in
70-
guard let strongSelf = self else { return }
71-
strongSelf.requestToRetry.forEach { $0(.retryWithDelay(0.25)) }
72-
strongSelf.requestToRetry.removeAll()
76+
if !isRefreshing {
77+
refreshTokens { [weak self] (succeeded, accessToken, refreshToken) in
78+
guard let strongSelf = self else { return }
79+
strongSelf.requestToRetry.forEach { $0(.retryWithDelay(0.25)) }
80+
strongSelf.requestToRetry.removeAll()
81+
}
82+
}
7383
}
7484
}
7585
}

Source/Core/API/NetworkDataSource.swift

-3
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,6 @@ class NetworkDataSource {
2323
route: INPAPIConfiguration,
2424
decoder: JSONDecoder = JSONDecoder(),
2525
completion: @escaping RequestCompletion<T>) {
26-
if route.requiresAuthorization, !session.isAuthorized {
27-
return completion(nil, InPlayerUnauthorizedError())
28-
}
2926

3027
session.request(route).validate().responseDecodable(decoder: decoder) { (response: DataResponse<T, AFError>) in
3128
switch response.result {

Source/Core/Account.swift

+8
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,14 @@ public extension InPlayer {
2727
return UserDefaults.credentials
2828
}
2929

30+
/**
31+
Removes account and user credentials
32+
*/
33+
public static func removeCredentials() {
34+
UserDefaults.credentials = nil
35+
UserDefaults.account = nil
36+
}
37+
3038
/**
3139
Get account if logged in, else it returns nil
3240
- Returns: Account or nil

0 commit comments

Comments
 (0)