Skip to content

Commit 785cbbb

Browse files
[Swift5][URLSession] Fix handling of customHeaders between retries (#7527)
* fix: correct handling of customHeaders Problem: custom headers could be overwritten between request retries following, e.g. a token refresh ( for example, while implementing @4brunu refresh code : #5462 (comment) ). A simple reordering of the modifiedRequest headers construction solves the problem. * fix: correct PetStore samples implementation [PR#7527] Co-authored-by: Franz Marini <f.marini@opengate.biz>
1 parent 8b39335 commit 785cbbb

11 files changed

Lines changed: 66 additions & 33 deletions

File tree

modules/openapi-generator/src/main/resources/swift5/libraries/urlsession/URLSessionImplementations.mustache

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,11 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
8787

8888
originalRequest.httpMethod = method.rawValue
8989

90-
buildHeaders().forEach { key, value in
90+
headers.forEach { key, value in
9191
originalRequest.setValue(value, forHTTPHeaderField: key)
9292
}
9393

94-
headers.forEach { key, value in
94+
buildHeaders().forEach { key, value in
9595
originalRequest.setValue(value, forHTTPHeaderField: key)
9696
}
9797

@@ -244,10 +244,13 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
244244
}
245245

246246
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} func buildHeaders() -> [String: String] {
247-
var httpHeaders = {{projectName}}API.customHeaders
247+
var httpHeaders: [String : String] = [:]
248248
for (key, value) in self.headers {
249249
httpHeaders[key] = value
250250
}
251+
for (key, value) in {{projectName}}API.customHeaders {
252+
httpHeaders[key] = value
253+
}
251254
return httpHeaders
252255
}
253256

samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,11 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
8787

8888
originalRequest.httpMethod = method.rawValue
8989

90-
buildHeaders().forEach { key, value in
90+
headers.forEach { key, value in
9191
originalRequest.setValue(value, forHTTPHeaderField: key)
9292
}
9393

94-
headers.forEach { key, value in
94+
buildHeaders().forEach { key, value in
9595
originalRequest.setValue(value, forHTTPHeaderField: key)
9696
}
9797

@@ -244,10 +244,13 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
244244
}
245245

246246
open func buildHeaders() -> [String: String] {
247-
var httpHeaders = PetstoreClientAPI.customHeaders
247+
var httpHeaders: [String : String] = [:]
248248
for (key, value) in self.headers {
249249
httpHeaders[key] = value
250250
}
251+
for (key, value) in PetstoreClientAPI.customHeaders {
252+
httpHeaders[key] = value
253+
}
251254
return httpHeaders
252255
}
253256

samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,11 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
8787

8888
originalRequest.httpMethod = method.rawValue
8989

90-
buildHeaders().forEach { key, value in
90+
headers.forEach { key, value in
9191
originalRequest.setValue(value, forHTTPHeaderField: key)
9292
}
9393

94-
headers.forEach { key, value in
94+
buildHeaders().forEach { key, value in
9595
originalRequest.setValue(value, forHTTPHeaderField: key)
9696
}
9797

@@ -244,10 +244,13 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
244244
}
245245

246246
open func buildHeaders() -> [String: String] {
247-
var httpHeaders = PetstoreClientAPI.customHeaders
247+
var httpHeaders: [String : String] = [:]
248248
for (key, value) in self.headers {
249249
httpHeaders[key] = value
250250
}
251+
for (key, value) in PetstoreClientAPI.customHeaders {
252+
httpHeaders[key] = value
253+
}
251254
return httpHeaders
252255
}
253256

samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,11 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
8787

8888
originalRequest.httpMethod = method.rawValue
8989

90-
buildHeaders().forEach { key, value in
90+
headers.forEach { key, value in
9191
originalRequest.setValue(value, forHTTPHeaderField: key)
9292
}
9393

94-
headers.forEach { key, value in
94+
buildHeaders().forEach { key, value in
9595
originalRequest.setValue(value, forHTTPHeaderField: key)
9696
}
9797

@@ -244,10 +244,13 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
244244
}
245245

246246
open func buildHeaders() -> [String: String] {
247-
var httpHeaders = PetstoreClientAPI.customHeaders
247+
var httpHeaders: [String : String] = [:]
248248
for (key, value) in self.headers {
249249
httpHeaders[key] = value
250250
}
251+
for (key, value) in PetstoreClientAPI.customHeaders {
252+
httpHeaders[key] = value
253+
}
251254
return httpHeaders
252255
}
253256

samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,11 @@ internal class URLSessionRequestBuilder<T>: RequestBuilder<T> {
8787

8888
originalRequest.httpMethod = method.rawValue
8989

90-
buildHeaders().forEach { key, value in
90+
headers.forEach { key, value in
9191
originalRequest.setValue(value, forHTTPHeaderField: key)
9292
}
9393

94-
headers.forEach { key, value in
94+
buildHeaders().forEach { key, value in
9595
originalRequest.setValue(value, forHTTPHeaderField: key)
9696
}
9797

@@ -244,10 +244,13 @@ internal class URLSessionRequestBuilder<T>: RequestBuilder<T> {
244244
}
245245

246246
internal func buildHeaders() -> [String: String] {
247-
var httpHeaders = PetstoreClientAPI.customHeaders
247+
var httpHeaders: [String : String] = [:]
248248
for (key, value) in self.headers {
249249
httpHeaders[key] = value
250250
}
251+
for (key, value) in PetstoreClientAPI.customHeaders {
252+
httpHeaders[key] = value
253+
}
251254
return httpHeaders
252255
}
253256

samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,11 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
8787

8888
originalRequest.httpMethod = method.rawValue
8989

90-
buildHeaders().forEach { key, value in
90+
headers.forEach { key, value in
9191
originalRequest.setValue(value, forHTTPHeaderField: key)
9292
}
9393

94-
headers.forEach { key, value in
94+
buildHeaders().forEach { key, value in
9595
originalRequest.setValue(value, forHTTPHeaderField: key)
9696
}
9797

@@ -244,10 +244,13 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
244244
}
245245

246246
open func buildHeaders() -> [String: String] {
247-
var httpHeaders = PetstoreClientAPI.customHeaders
247+
var httpHeaders: [String : String] = [:]
248248
for (key, value) in self.headers {
249249
httpHeaders[key] = value
250250
}
251+
for (key, value) in PetstoreClientAPI.customHeaders {
252+
httpHeaders[key] = value
253+
}
251254
return httpHeaders
252255
}
253256

samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,11 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
8787

8888
originalRequest.httpMethod = method.rawValue
8989

90-
buildHeaders().forEach { key, value in
90+
headers.forEach { key, value in
9191
originalRequest.setValue(value, forHTTPHeaderField: key)
9292
}
9393

94-
headers.forEach { key, value in
94+
buildHeaders().forEach { key, value in
9595
originalRequest.setValue(value, forHTTPHeaderField: key)
9696
}
9797

@@ -244,10 +244,13 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
244244
}
245245

246246
open func buildHeaders() -> [String: String] {
247-
var httpHeaders = PetstoreClientAPI.customHeaders
247+
var httpHeaders: [String : String] = [:]
248248
for (key, value) in self.headers {
249249
httpHeaders[key] = value
250250
}
251+
for (key, value) in PetstoreClientAPI.customHeaders {
252+
httpHeaders[key] = value
253+
}
251254
return httpHeaders
252255
}
253256

samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,11 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
8787

8888
originalRequest.httpMethod = method.rawValue
8989

90-
buildHeaders().forEach { key, value in
90+
headers.forEach { key, value in
9191
originalRequest.setValue(value, forHTTPHeaderField: key)
9292
}
9393

94-
headers.forEach { key, value in
94+
buildHeaders().forEach { key, value in
9595
originalRequest.setValue(value, forHTTPHeaderField: key)
9696
}
9797

@@ -244,10 +244,13 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
244244
}
245245

246246
open func buildHeaders() -> [String: String] {
247-
var httpHeaders = PetstoreClientAPI.customHeaders
247+
var httpHeaders: [String : String] = [:]
248248
for (key, value) in self.headers {
249249
httpHeaders[key] = value
250250
}
251+
for (key, value) in PetstoreClientAPI.customHeaders {
252+
httpHeaders[key] = value
253+
}
251254
return httpHeaders
252255
}
253256

samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,11 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
8787

8888
originalRequest.httpMethod = method.rawValue
8989

90-
buildHeaders().forEach { key, value in
90+
headers.forEach { key, value in
9191
originalRequest.setValue(value, forHTTPHeaderField: key)
9292
}
9393

94-
headers.forEach { key, value in
94+
buildHeaders().forEach { key, value in
9595
originalRequest.setValue(value, forHTTPHeaderField: key)
9696
}
9797

@@ -244,10 +244,13 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
244244
}
245245

246246
open func buildHeaders() -> [String: String] {
247-
var httpHeaders = PetstoreClientAPI.customHeaders
247+
var httpHeaders: [String : String] = [:]
248248
for (key, value) in self.headers {
249249
httpHeaders[key] = value
250250
}
251+
for (key, value) in PetstoreClientAPI.customHeaders {
252+
httpHeaders[key] = value
253+
}
251254
return httpHeaders
252255
}
253256

samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,11 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
8787

8888
originalRequest.httpMethod = method.rawValue
8989

90-
buildHeaders().forEach { key, value in
90+
headers.forEach { key, value in
9191
originalRequest.setValue(value, forHTTPHeaderField: key)
9292
}
9393

94-
headers.forEach { key, value in
94+
buildHeaders().forEach { key, value in
9595
originalRequest.setValue(value, forHTTPHeaderField: key)
9696
}
9797

@@ -244,10 +244,13 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
244244
}
245245

246246
open func buildHeaders() -> [String: String] {
247-
var httpHeaders = PetstoreClientAPI.customHeaders
247+
var httpHeaders: [String : String] = [:]
248248
for (key, value) in self.headers {
249249
httpHeaders[key] = value
250250
}
251+
for (key, value) in PetstoreClientAPI.customHeaders {
252+
httpHeaders[key] = value
253+
}
251254
return httpHeaders
252255
}
253256

0 commit comments

Comments
 (0)