Skip to content

Commit 779f8da

Browse files
committed
Merge branch 'fix-401-handling' into 'master'
Fix setting access token for non IDKit use cases See merge request pace/mobile/ios/pace-cloud-sdk!423
2 parents ee2a0a8 + e712e82 commit 779f8da

File tree

5 files changed

+180
-132
lines changed

5 files changed

+180
-132
lines changed

PACECloudSDK/API/Custom/CustomAPIClient.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public class CustomAPIClient {
2929
/// Makes a custom JSON request and decodes the response into a specified `Decodable` type.
3030
///
3131
/// This method should be used for making general JSON requests that do not require authentication or that do not use IDKit.
32-
/// If the request needs authorization and IDKit is used, use the `makeCustomAuthenticatedJSONRequest` method instead.
32+
/// If the request needs authorization **and** IDKit is used, use the `makeCustomAuthenticatedJSONRequest` method instead.
3333
@discardableResult
3434
public func makeCustomJSONRequest<T: Decodable>(_ request: URLRequest,
3535
session: URLSession = .shared,
@@ -93,7 +93,7 @@ public class CustomAPIClient {
9393
/// Makes a custom request and passes the received data in the completion block.
9494
///
9595
/// This method should be used for making general data requests that do not require authentication or that do not use IDKit.
96-
/// If the request needs authorization and IDKit is used, use the `makeCustomAuthenticatedDataRequest` method instead.
96+
/// If the request needs authorization **and** IDKit is used, use the `makeCustomAuthenticatedDataRequest` method instead.
9797
@discardableResult
9898
public func makeCustomDataRequest(_ request: URLRequest,
9999
session: URLSession = .shared,
@@ -214,8 +214,8 @@ public class CustomAPIClient {
214214
return
215215
}
216216

217-
if isAuthenticatedRequest,
218-
response.statusCode == HttpStatusCode.unauthorized.rawValue
217+
if isAuthenticatedRequest
218+
&& response.statusCode == HttpStatusCode.unauthorized.rawValue
219219
&& currentUnauthorizedRetryCount < maxUnauthorizedRetryCount
220220
&& IDKit.isSessionAvailable {
221221
IDKit.refreshToken(force: true) { [weak self] result in

PACECloudSDK/API/Fueling/Generated/FuelingAPIClient.swift

Lines changed: 44 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -88,41 +88,53 @@ public class FuelingAPIClient {
8888
urlRequest = requestBehaviour.modifyRequest(urlRequest)
8989

9090
if request.isAuthorizationRequired
91-
&& request.customHeaders[HttpHeaderFields.authorization.rawValue] == nil
92-
&& IDKit.isSessionAvailable {
93-
IDKit.refreshToken { [weak self] result in
94-
guard let self else { return }
95-
guard case let .failure(error) = result else {
96-
guard case let .success(accessToken) = result,
97-
let accessToken else { return }
98-
urlRequest.setValue("Bearer \(accessToken)",
99-
forHTTPHeaderField: HttpHeaderFields.authorization.rawValue)
100-
self.validateNetworkRequest(request: request,
101-
urlRequest: urlRequest,
102-
cancellableRequest: cancellableRequest,
103-
requestBehaviour: requestBehaviour,
104-
currentUnauthorizedRetryCount: currentUnauthorizedRetryCount,
105-
currentRetryCount: currentRetryCount,
106-
completionQueue: completionQueue,
107-
complete: complete)
108-
return
109-
}
110-
111-
if case .failedTokenRefresh = error {
112-
completionQueue.async {
113-
let response = FuelingAPIResponse<T>(request: request,
114-
result: .failure(APIClientError
115-
.unexpectedStatusCode(statusCode: 401,
116-
data: Data("UNAUTHORIZED".utf8))))
117-
complete(response)
91+
&& request.customHeaders[HttpHeaderFields.authorization.rawValue] == nil {
92+
if IDKit.isSessionAvailable {
93+
IDKit.refreshToken { [weak self] result in
94+
guard let self else { return }
95+
guard case let .failure(error) = result else {
96+
guard case let .success(accessToken) = result,
97+
let accessToken else { return }
98+
urlRequest.setValue("Bearer \(accessToken)",
99+
forHTTPHeaderField: HttpHeaderFields.authorization.rawValue)
100+
self.validateNetworkRequest(request: request,
101+
urlRequest: urlRequest,
102+
cancellableRequest: cancellableRequest,
103+
requestBehaviour: requestBehaviour,
104+
currentUnauthorizedRetryCount: currentUnauthorizedRetryCount,
105+
currentRetryCount: currentRetryCount,
106+
completionQueue: completionQueue,
107+
complete: complete)
108+
return
118109
}
119-
} else {
120-
completionQueue.async {
121-
let response = FuelingAPIResponse<T>(request: request,
122-
result: .failure(APIClientError.unknownError(error)))
123-
complete(response)
110+
111+
if case .failedTokenRefresh = error {
112+
completionQueue.async {
113+
let response = FuelingAPIResponse<T>(request: request,
114+
result: .failure(APIClientError
115+
.unexpectedStatusCode(statusCode: 401,
116+
data: Data("UNAUTHORIZED".utf8))))
117+
complete(response)
118+
}
119+
} else {
120+
completionQueue.async {
121+
let response = FuelingAPIResponse<T>(request: request,
122+
result: .failure(APIClientError.unknownError(error)))
123+
complete(response)
124+
}
124125
}
125126
}
127+
} else if let accessToken = API.accessToken {
128+
urlRequest.setValue("Bearer \(accessToken)",
129+
forHTTPHeaderField: HttpHeaderFields.authorization.rawValue)
130+
self.validateNetworkRequest(request: request,
131+
urlRequest: urlRequest,
132+
cancellableRequest: cancellableRequest,
133+
requestBehaviour: requestBehaviour,
134+
currentUnauthorizedRetryCount: currentUnauthorizedRetryCount,
135+
currentRetryCount: currentRetryCount,
136+
completionQueue: completionQueue,
137+
complete: complete)
126138
}
127139
} else {
128140
validateNetworkRequest(request: request,

PACECloudSDK/API/POI/Generated/POIAPIClient.swift

Lines changed: 44 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -88,41 +88,53 @@ public class POIAPIClient {
8888
urlRequest = requestBehaviour.modifyRequest(urlRequest)
8989

9090
if request.isAuthorizationRequired
91-
&& request.customHeaders[HttpHeaderFields.authorization.rawValue] == nil
92-
&& IDKit.isSessionAvailable {
93-
IDKit.refreshToken { [weak self] result in
94-
guard let self else { return }
95-
guard case let .failure(error) = result else {
96-
guard case let .success(accessToken) = result,
97-
let accessToken else { return }
98-
urlRequest.setValue("Bearer \(accessToken)",
99-
forHTTPHeaderField: HttpHeaderFields.authorization.rawValue)
100-
self.validateNetworkRequest(request: request,
101-
urlRequest: urlRequest,
102-
cancellableRequest: cancellableRequest,
103-
requestBehaviour: requestBehaviour,
104-
currentUnauthorizedRetryCount: currentUnauthorizedRetryCount,
105-
currentRetryCount: currentRetryCount,
106-
completionQueue: completionQueue,
107-
complete: complete)
108-
return
109-
}
110-
111-
if case .failedTokenRefresh = error {
112-
completionQueue.async {
113-
let response = POIAPIResponse<T>(request: request,
114-
result: .failure(APIClientError
115-
.unexpectedStatusCode(statusCode: 401,
116-
data: Data("UNAUTHORIZED".utf8))))
117-
complete(response)
91+
&& request.customHeaders[HttpHeaderFields.authorization.rawValue] == nil {
92+
if IDKit.isSessionAvailable {
93+
IDKit.refreshToken { [weak self] result in
94+
guard let self else { return }
95+
guard case let .failure(error) = result else {
96+
guard case let .success(accessToken) = result,
97+
let accessToken else { return }
98+
urlRequest.setValue("Bearer \(accessToken)",
99+
forHTTPHeaderField: HttpHeaderFields.authorization.rawValue)
100+
self.validateNetworkRequest(request: request,
101+
urlRequest: urlRequest,
102+
cancellableRequest: cancellableRequest,
103+
requestBehaviour: requestBehaviour,
104+
currentUnauthorizedRetryCount: currentUnauthorizedRetryCount,
105+
currentRetryCount: currentRetryCount,
106+
completionQueue: completionQueue,
107+
complete: complete)
108+
return
118109
}
119-
} else {
120-
completionQueue.async {
121-
let response = POIAPIResponse<T>(request: request,
122-
result: .failure(APIClientError.unknownError(error)))
123-
complete(response)
110+
111+
if case .failedTokenRefresh = error {
112+
completionQueue.async {
113+
let response = POIAPIResponse<T>(request: request,
114+
result: .failure(APIClientError
115+
.unexpectedStatusCode(statusCode: 401,
116+
data: Data("UNAUTHORIZED".utf8))))
117+
complete(response)
118+
}
119+
} else {
120+
completionQueue.async {
121+
let response = POIAPIResponse<T>(request: request,
122+
result: .failure(APIClientError.unknownError(error)))
123+
complete(response)
124+
}
124125
}
125126
}
127+
} else if let accessToken = API.accessToken {
128+
urlRequest.setValue("Bearer \(accessToken)",
129+
forHTTPHeaderField: HttpHeaderFields.authorization.rawValue)
130+
self.validateNetworkRequest(request: request,
131+
urlRequest: urlRequest,
132+
cancellableRequest: cancellableRequest,
133+
requestBehaviour: requestBehaviour,
134+
currentUnauthorizedRetryCount: currentUnauthorizedRetryCount,
135+
currentRetryCount: currentRetryCount,
136+
completionQueue: completionQueue,
137+
complete: complete)
126138
}
127139
} else {
128140
validateNetworkRequest(request: request,

PACECloudSDK/API/Pay/Generated/PayAPIClient.swift

Lines changed: 44 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -88,41 +88,53 @@ public class PayAPIClient {
8888
urlRequest = requestBehaviour.modifyRequest(urlRequest)
8989

9090
if request.isAuthorizationRequired
91-
&& request.customHeaders[HttpHeaderFields.authorization.rawValue] == nil
92-
&& IDKit.isSessionAvailable {
93-
IDKit.refreshToken { [weak self] result in
94-
guard let self else { return }
95-
guard case let .failure(error) = result else {
96-
guard case let .success(accessToken) = result,
97-
let accessToken else { return }
98-
urlRequest.setValue("Bearer \(accessToken)",
99-
forHTTPHeaderField: HttpHeaderFields.authorization.rawValue)
100-
self.validateNetworkRequest(request: request,
101-
urlRequest: urlRequest,
102-
cancellableRequest: cancellableRequest,
103-
requestBehaviour: requestBehaviour,
104-
currentUnauthorizedRetryCount: currentUnauthorizedRetryCount,
105-
currentRetryCount: currentRetryCount,
106-
completionQueue: completionQueue,
107-
complete: complete)
108-
return
109-
}
110-
111-
if case .failedTokenRefresh = error {
112-
completionQueue.async {
113-
let response = PayAPIResponse<T>(request: request,
114-
result: .failure(APIClientError
115-
.unexpectedStatusCode(statusCode: 401,
116-
data: Data("UNAUTHORIZED".utf8))))
117-
complete(response)
91+
&& request.customHeaders[HttpHeaderFields.authorization.rawValue] == nil {
92+
if IDKit.isSessionAvailable {
93+
IDKit.refreshToken { [weak self] result in
94+
guard let self else { return }
95+
guard case let .failure(error) = result else {
96+
guard case let .success(accessToken) = result,
97+
let accessToken else { return }
98+
urlRequest.setValue("Bearer \(accessToken)",
99+
forHTTPHeaderField: HttpHeaderFields.authorization.rawValue)
100+
self.validateNetworkRequest(request: request,
101+
urlRequest: urlRequest,
102+
cancellableRequest: cancellableRequest,
103+
requestBehaviour: requestBehaviour,
104+
currentUnauthorizedRetryCount: currentUnauthorizedRetryCount,
105+
currentRetryCount: currentRetryCount,
106+
completionQueue: completionQueue,
107+
complete: complete)
108+
return
118109
}
119-
} else {
120-
completionQueue.async {
121-
let response = PayAPIResponse<T>(request: request,
122-
result: .failure(APIClientError.unknownError(error)))
123-
complete(response)
110+
111+
if case .failedTokenRefresh = error {
112+
completionQueue.async {
113+
let response = PayAPIResponse<T>(request: request,
114+
result: .failure(APIClientError
115+
.unexpectedStatusCode(statusCode: 401,
116+
data: Data("UNAUTHORIZED".utf8))))
117+
complete(response)
118+
}
119+
} else {
120+
completionQueue.async {
121+
let response = PayAPIResponse<T>(request: request,
122+
result: .failure(APIClientError.unknownError(error)))
123+
complete(response)
124+
}
124125
}
125126
}
127+
} else if let accessToken = API.accessToken {
128+
urlRequest.setValue("Bearer \(accessToken)",
129+
forHTTPHeaderField: HttpHeaderFields.authorization.rawValue)
130+
self.validateNetworkRequest(request: request,
131+
urlRequest: urlRequest,
132+
cancellableRequest: cancellableRequest,
133+
requestBehaviour: requestBehaviour,
134+
currentUnauthorizedRetryCount: currentUnauthorizedRetryCount,
135+
currentRetryCount: currentRetryCount,
136+
completionQueue: completionQueue,
137+
complete: complete)
126138
}
127139
} else {
128140
validateNetworkRequest(request: request,

0 commit comments

Comments
 (0)