From 785cbbbb635e0388060b8a646b04730e28a197de Mon Sep 17 00:00:00 2001 From: Francesco Marini Date: Mon, 28 Sep 2020 15:46:47 +0200 Subject: [PATCH] [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 --- .../urlsession/URLSessionImplementations.mustache | 9 ++++++--- .../Classes/OpenAPIs/URLSessionImplementations.swift | 9 ++++++--- .../Classes/OpenAPIs/URLSessionImplementations.swift | 9 ++++++--- .../Classes/OpenAPIs/URLSessionImplementations.swift | 9 ++++++--- .../Classes/OpenAPIs/URLSessionImplementations.swift | 9 ++++++--- .../Classes/OpenAPIs/URLSessionImplementations.swift | 9 ++++++--- .../Classes/OpenAPIs/URLSessionImplementations.swift | 9 ++++++--- .../Classes/OpenAPIs/URLSessionImplementations.swift | 9 ++++++--- .../Classes/OpenAPIs/URLSessionImplementations.swift | 9 ++++++--- .../Classes/OpenAPIs/URLSessionImplementations.swift | 9 ++++++--- .../Classes/OpenAPIs/URLSessionImplementations.swift | 9 ++++++--- 11 files changed, 66 insertions(+), 33 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/swift5/libraries/urlsession/URLSessionImplementations.mustache b/modules/openapi-generator/src/main/resources/swift5/libraries/urlsession/URLSessionImplementations.mustache index ca5d529b041c..0f19cdfbcf94 100644 --- a/modules/openapi-generator/src/main/resources/swift5/libraries/urlsession/URLSessionImplementations.mustache +++ b/modules/openapi-generator/src/main/resources/swift5/libraries/urlsession/URLSessionImplementations.mustache @@ -87,11 +87,11 @@ private var urlSessionStore = SynchronizedDictionary() 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() } {{#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 } diff --git a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 55d0eb421919..aa169c152cde 100644 --- a/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/combineLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -87,11 +87,11 @@ open class URLSessionRequestBuilder: RequestBuilder { 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: RequestBuilder { } 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 } diff --git a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 55d0eb421919..aa169c152cde 100644 --- a/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/default/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -87,11 +87,11 @@ open class URLSessionRequestBuilder: RequestBuilder { 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: RequestBuilder { } 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 } diff --git a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 55d0eb421919..aa169c152cde 100644 --- a/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/deprecated/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -87,11 +87,11 @@ open class URLSessionRequestBuilder: RequestBuilder { 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: RequestBuilder { } 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 } diff --git a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index a907ec1d345e..60780b0baa8a 100644 --- a/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/nonPublicApi/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -87,11 +87,11 @@ internal class URLSessionRequestBuilder: RequestBuilder { 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: RequestBuilder { } 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 } diff --git a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 55d0eb421919..aa169c152cde 100644 --- a/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/objcCompatible/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -87,11 +87,11 @@ open class URLSessionRequestBuilder: RequestBuilder { 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: RequestBuilder { } 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 } diff --git a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 55d0eb421919..aa169c152cde 100644 --- a/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/promisekitLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -87,11 +87,11 @@ open class URLSessionRequestBuilder: RequestBuilder { 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: RequestBuilder { } 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 } diff --git a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 55d0eb421919..aa169c152cde 100644 --- a/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/readonlyProperties/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -87,11 +87,11 @@ open class URLSessionRequestBuilder: RequestBuilder { 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: RequestBuilder { } 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 } diff --git a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 55d0eb421919..aa169c152cde 100644 --- a/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/resultLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -87,11 +87,11 @@ open class URLSessionRequestBuilder: RequestBuilder { 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: RequestBuilder { } 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 } diff --git a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 55d0eb421919..aa169c152cde 100644 --- a/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/rxswiftLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -87,11 +87,11 @@ open class URLSessionRequestBuilder: RequestBuilder { 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: RequestBuilder { } 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 } diff --git a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift b/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift index 55d0eb421919..aa169c152cde 100644 --- a/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift +++ b/samples/client/petstore/swift5/urlsessionLibrary/PetstoreClient/Classes/OpenAPIs/URLSessionImplementations.swift @@ -87,11 +87,11 @@ open class URLSessionRequestBuilder: RequestBuilder { 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: RequestBuilder { } 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 }