[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 :
https://github.com/OpenAPITools/openapi-generator/issues/5462#issuecomment-592417371 ).
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>
This commit is contained in:
Francesco Marini 2020-09-28 15:46:47 +02:00 committed by GitHub
parent 8b39335859
commit 785cbbbb63
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 66 additions and 33 deletions

View File

@ -87,11 +87,11 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
originalRequest.httpMethod = method.rawValue
buildHeaders().forEach { key, value in
headers.forEach { key, value in
originalRequest.setValue(value, forHTTPHeaderField: key)
}
headers.forEach { key, value in
buildHeaders().forEach { key, value in
originalRequest.setValue(value, forHTTPHeaderField: key)
}
@ -244,10 +244,13 @@ private var urlSessionStore = SynchronizedDictionary<String, URLSession>()
}
{{#nonPublicApi}}internal{{/nonPublicApi}}{{^nonPublicApi}}open{{/nonPublicApi}} func buildHeaders() -> [String: String] {
var httpHeaders = {{projectName}}API.customHeaders
var httpHeaders: [String : String] = [:]
for (key, value) in self.headers {
httpHeaders[key] = value
}
for (key, value) in {{projectName}}API.customHeaders {
httpHeaders[key] = value
}
return httpHeaders
}

View File

@ -87,11 +87,11 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
originalRequest.httpMethod = method.rawValue
buildHeaders().forEach { key, value in
headers.forEach { key, value in
originalRequest.setValue(value, forHTTPHeaderField: key)
}
headers.forEach { key, value in
buildHeaders().forEach { key, value in
originalRequest.setValue(value, forHTTPHeaderField: key)
}
@ -244,10 +244,13 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
}
open func buildHeaders() -> [String: String] {
var httpHeaders = PetstoreClientAPI.customHeaders
var httpHeaders: [String : String] = [:]
for (key, value) in self.headers {
httpHeaders[key] = value
}
for (key, value) in PetstoreClientAPI.customHeaders {
httpHeaders[key] = value
}
return httpHeaders
}

View File

@ -87,11 +87,11 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
originalRequest.httpMethod = method.rawValue
buildHeaders().forEach { key, value in
headers.forEach { key, value in
originalRequest.setValue(value, forHTTPHeaderField: key)
}
headers.forEach { key, value in
buildHeaders().forEach { key, value in
originalRequest.setValue(value, forHTTPHeaderField: key)
}
@ -244,10 +244,13 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
}
open func buildHeaders() -> [String: String] {
var httpHeaders = PetstoreClientAPI.customHeaders
var httpHeaders: [String : String] = [:]
for (key, value) in self.headers {
httpHeaders[key] = value
}
for (key, value) in PetstoreClientAPI.customHeaders {
httpHeaders[key] = value
}
return httpHeaders
}

View File

@ -87,11 +87,11 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
originalRequest.httpMethod = method.rawValue
buildHeaders().forEach { key, value in
headers.forEach { key, value in
originalRequest.setValue(value, forHTTPHeaderField: key)
}
headers.forEach { key, value in
buildHeaders().forEach { key, value in
originalRequest.setValue(value, forHTTPHeaderField: key)
}
@ -244,10 +244,13 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
}
open func buildHeaders() -> [String: String] {
var httpHeaders = PetstoreClientAPI.customHeaders
var httpHeaders: [String : String] = [:]
for (key, value) in self.headers {
httpHeaders[key] = value
}
for (key, value) in PetstoreClientAPI.customHeaders {
httpHeaders[key] = value
}
return httpHeaders
}

View File

@ -87,11 +87,11 @@ internal class URLSessionRequestBuilder<T>: RequestBuilder<T> {
originalRequest.httpMethod = method.rawValue
buildHeaders().forEach { key, value in
headers.forEach { key, value in
originalRequest.setValue(value, forHTTPHeaderField: key)
}
headers.forEach { key, value in
buildHeaders().forEach { key, value in
originalRequest.setValue(value, forHTTPHeaderField: key)
}
@ -244,10 +244,13 @@ internal class URLSessionRequestBuilder<T>: RequestBuilder<T> {
}
internal func buildHeaders() -> [String: String] {
var httpHeaders = PetstoreClientAPI.customHeaders
var httpHeaders: [String : String] = [:]
for (key, value) in self.headers {
httpHeaders[key] = value
}
for (key, value) in PetstoreClientAPI.customHeaders {
httpHeaders[key] = value
}
return httpHeaders
}

View File

@ -87,11 +87,11 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
originalRequest.httpMethod = method.rawValue
buildHeaders().forEach { key, value in
headers.forEach { key, value in
originalRequest.setValue(value, forHTTPHeaderField: key)
}
headers.forEach { key, value in
buildHeaders().forEach { key, value in
originalRequest.setValue(value, forHTTPHeaderField: key)
}
@ -244,10 +244,13 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
}
open func buildHeaders() -> [String: String] {
var httpHeaders = PetstoreClientAPI.customHeaders
var httpHeaders: [String : String] = [:]
for (key, value) in self.headers {
httpHeaders[key] = value
}
for (key, value) in PetstoreClientAPI.customHeaders {
httpHeaders[key] = value
}
return httpHeaders
}

View File

@ -87,11 +87,11 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
originalRequest.httpMethod = method.rawValue
buildHeaders().forEach { key, value in
headers.forEach { key, value in
originalRequest.setValue(value, forHTTPHeaderField: key)
}
headers.forEach { key, value in
buildHeaders().forEach { key, value in
originalRequest.setValue(value, forHTTPHeaderField: key)
}
@ -244,10 +244,13 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
}
open func buildHeaders() -> [String: String] {
var httpHeaders = PetstoreClientAPI.customHeaders
var httpHeaders: [String : String] = [:]
for (key, value) in self.headers {
httpHeaders[key] = value
}
for (key, value) in PetstoreClientAPI.customHeaders {
httpHeaders[key] = value
}
return httpHeaders
}

View File

@ -87,11 +87,11 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
originalRequest.httpMethod = method.rawValue
buildHeaders().forEach { key, value in
headers.forEach { key, value in
originalRequest.setValue(value, forHTTPHeaderField: key)
}
headers.forEach { key, value in
buildHeaders().forEach { key, value in
originalRequest.setValue(value, forHTTPHeaderField: key)
}
@ -244,10 +244,13 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
}
open func buildHeaders() -> [String: String] {
var httpHeaders = PetstoreClientAPI.customHeaders
var httpHeaders: [String : String] = [:]
for (key, value) in self.headers {
httpHeaders[key] = value
}
for (key, value) in PetstoreClientAPI.customHeaders {
httpHeaders[key] = value
}
return httpHeaders
}

View File

@ -87,11 +87,11 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
originalRequest.httpMethod = method.rawValue
buildHeaders().forEach { key, value in
headers.forEach { key, value in
originalRequest.setValue(value, forHTTPHeaderField: key)
}
headers.forEach { key, value in
buildHeaders().forEach { key, value in
originalRequest.setValue(value, forHTTPHeaderField: key)
}
@ -244,10 +244,13 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
}
open func buildHeaders() -> [String: String] {
var httpHeaders = PetstoreClientAPI.customHeaders
var httpHeaders: [String : String] = [:]
for (key, value) in self.headers {
httpHeaders[key] = value
}
for (key, value) in PetstoreClientAPI.customHeaders {
httpHeaders[key] = value
}
return httpHeaders
}

View File

@ -87,11 +87,11 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
originalRequest.httpMethod = method.rawValue
buildHeaders().forEach { key, value in
headers.forEach { key, value in
originalRequest.setValue(value, forHTTPHeaderField: key)
}
headers.forEach { key, value in
buildHeaders().forEach { key, value in
originalRequest.setValue(value, forHTTPHeaderField: key)
}
@ -244,10 +244,13 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
}
open func buildHeaders() -> [String: String] {
var httpHeaders = PetstoreClientAPI.customHeaders
var httpHeaders: [String : String] = [:]
for (key, value) in self.headers {
httpHeaders[key] = value
}
for (key, value) in PetstoreClientAPI.customHeaders {
httpHeaders[key] = value
}
return httpHeaders
}

View File

@ -87,11 +87,11 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
originalRequest.httpMethod = method.rawValue
buildHeaders().forEach { key, value in
headers.forEach { key, value in
originalRequest.setValue(value, forHTTPHeaderField: key)
}
headers.forEach { key, value in
buildHeaders().forEach { key, value in
originalRequest.setValue(value, forHTTPHeaderField: key)
}
@ -244,10 +244,13 @@ open class URLSessionRequestBuilder<T>: RequestBuilder<T> {
}
open func buildHeaders() -> [String: String] {
var httpHeaders = PetstoreClientAPI.customHeaders
var httpHeaders: [String : String] = [:]
for (key, value) in self.headers {
httpHeaders[key] = value
}
for (key, value) in PetstoreClientAPI.customHeaders {
httpHeaders[key] = value
}
return httpHeaders
}