Skip to content

Commit 30787a1

Browse files
authored
[Python] Add ca_cert_data parameter (#20697)
* Add `ca_cert_data` parameter to Python client. This lets a client validate a server's CA certificate chain using a variable/constant containing PEM (`str`) or DER (`bytes`) data, rather than needing to reference a file on disk. * python: Fix `ca_cert_data` on Python 3.8
1 parent 5757def commit 30787a1

File tree

11 files changed

+53
-12
lines changed

11 files changed

+53
-12
lines changed

modules/openapi-generator/src/main/resources/python/asyncio/rest.mustache

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ class RESTClientObject:
4747
self.maxsize = configuration.connection_pool_maxsize
4848

4949
self.ssl_context = ssl.create_default_context(
50-
cafile=configuration.ssl_ca_cert
50+
cafile=configuration.ssl_ca_cert,
51+
cadata=configuration.ca_cert_data,
5152
)
5253
if configuration.cert_file:
5354
self.ssl_context.load_cert_chain(

modules/openapi-generator/src/main/resources/python/configuration.mustache

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ from logging import FileHandler
1010
import multiprocessing
1111
{{/asyncio}}
1212
import sys
13-
from typing import Any, ClassVar, Dict, List, Literal, Optional, TypedDict
13+
from typing import Any, ClassVar, Dict, List, Literal, Optional, TypedDict, Union
1414
from typing_extensions import NotRequired, Self
1515

1616
import urllib3
@@ -183,6 +183,8 @@ class Configuration:
183183
:param ssl_ca_cert: str - the path to a file of concatenated CA certificates
184184
in PEM format.
185185
:param retries: Number of retries for API requests.
186+
:param ca_cert_data: verify the peer using concatenated CA certificate data
187+
in PEM (str) or DER (bytes) format.
186188

187189
{{#hasAuthMethods}}
188190
:Example:
@@ -282,13 +284,14 @@ conf = {{{packageName}}}.Configuration(
282284
{{#hasHttpSignatureMethods}}
283285
signing_info: Optional[HttpSigningConfiguration]=None,
284286
{{/hasHttpSignatureMethods}}
285-
server_index: Optional[int]=None,
287+
server_index: Optional[int]=None,
286288
server_variables: Optional[ServerVariablesT]=None,
287289
server_operation_index: Optional[Dict[int, int]]=None,
288290
server_operation_variables: Optional[Dict[int, ServerVariablesT]]=None,
289291
ignore_operation_servers: bool=False,
290292
ssl_ca_cert: Optional[str]=None,
291293
retries: Optional[int] = None,
294+
ca_cert_data: Optional[Union[str, bytes]] = None,
292295
*,
293296
debug: Optional[bool] = None,
294297
) -> None:
@@ -373,6 +376,10 @@ conf = {{{packageName}}}.Configuration(
373376
self.ssl_ca_cert = ssl_ca_cert
374377
"""Set this to customize the certificate file to verify the peer.
375378
"""
379+
self.ca_cert_data = ca_cert_data
380+
"""Set this to verify the peer using PEM (str) or DER (bytes)
381+
certificate data.
382+
"""
376383
self.cert_file = None
377384
"""client certificate file
378385
"""

modules/openapi-generator/src/main/resources/python/rest.mustache

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ class RESTClientObject:
6666
"ca_certs": configuration.ssl_ca_cert,
6767
"cert_file": configuration.cert_file,
6868
"key_file": configuration.key_file,
69+
"ca_cert_data": configuration.ca_cert_data,
6970
}
7071
if configuration.assert_hostname is not None:
7172
pool_args['assert_hostname'] = (

samples/client/echo_api/python-disallowAdditionalPropertiesIfNotPresent/openapi_client/configuration.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from logging import FileHandler
2020
import multiprocessing
2121
import sys
22-
from typing import Any, ClassVar, Dict, List, Literal, Optional, TypedDict
22+
from typing import Any, ClassVar, Dict, List, Literal, Optional, TypedDict, Union
2323
from typing_extensions import NotRequired, Self
2424

2525
import urllib3
@@ -163,6 +163,8 @@ class Configuration:
163163
:param ssl_ca_cert: str - the path to a file of concatenated CA certificates
164164
in PEM format.
165165
:param retries: Number of retries for API requests.
166+
:param ca_cert_data: verify the peer using concatenated CA certificate data
167+
in PEM (str) or DER (bytes) format.
166168
167169
:Example:
168170
@@ -193,13 +195,14 @@ def __init__(
193195
username: Optional[str]=None,
194196
password: Optional[str]=None,
195197
access_token: Optional[str]=None,
196-
server_index: Optional[int]=None,
198+
server_index: Optional[int]=None,
197199
server_variables: Optional[ServerVariablesT]=None,
198200
server_operation_index: Optional[Dict[int, int]]=None,
199201
server_operation_variables: Optional[Dict[int, ServerVariablesT]]=None,
200202
ignore_operation_servers: bool=False,
201203
ssl_ca_cert: Optional[str]=None,
202204
retries: Optional[int] = None,
205+
ca_cert_data: Optional[Union[str, bytes]] = None,
203206
*,
204207
debug: Optional[bool] = None,
205208
) -> None:
@@ -277,6 +280,10 @@ def __init__(
277280
self.ssl_ca_cert = ssl_ca_cert
278281
"""Set this to customize the certificate file to verify the peer.
279282
"""
283+
self.ca_cert_data = ca_cert_data
284+
"""Set this to verify the peer using PEM (str) or DER (bytes)
285+
certificate data.
286+
"""
280287
self.cert_file = None
281288
"""client certificate file
282289
"""

samples/client/echo_api/python-disallowAdditionalPropertiesIfNotPresent/openapi_client/rest.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ def __init__(self, configuration) -> None:
7777
"ca_certs": configuration.ssl_ca_cert,
7878
"cert_file": configuration.cert_file,
7979
"key_file": configuration.key_file,
80+
"ca_cert_data": configuration.ca_cert_data,
8081
}
8182
if configuration.assert_hostname is not None:
8283
pool_args['assert_hostname'] = (

samples/client/echo_api/python/openapi_client/configuration.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from logging import FileHandler
2020
import multiprocessing
2121
import sys
22-
from typing import Any, ClassVar, Dict, List, Literal, Optional, TypedDict
22+
from typing import Any, ClassVar, Dict, List, Literal, Optional, TypedDict, Union
2323
from typing_extensions import NotRequired, Self
2424

2525
import urllib3
@@ -163,6 +163,8 @@ class Configuration:
163163
:param ssl_ca_cert: str - the path to a file of concatenated CA certificates
164164
in PEM format.
165165
:param retries: Number of retries for API requests.
166+
:param ca_cert_data: verify the peer using concatenated CA certificate data
167+
in PEM (str) or DER (bytes) format.
166168
167169
:Example:
168170
@@ -193,13 +195,14 @@ def __init__(
193195
username: Optional[str]=None,
194196
password: Optional[str]=None,
195197
access_token: Optional[str]=None,
196-
server_index: Optional[int]=None,
198+
server_index: Optional[int]=None,
197199
server_variables: Optional[ServerVariablesT]=None,
198200
server_operation_index: Optional[Dict[int, int]]=None,
199201
server_operation_variables: Optional[Dict[int, ServerVariablesT]]=None,
200202
ignore_operation_servers: bool=False,
201203
ssl_ca_cert: Optional[str]=None,
202204
retries: Optional[int] = None,
205+
ca_cert_data: Optional[Union[str, bytes]] = None,
203206
*,
204207
debug: Optional[bool] = None,
205208
) -> None:
@@ -277,6 +280,10 @@ def __init__(
277280
self.ssl_ca_cert = ssl_ca_cert
278281
"""Set this to customize the certificate file to verify the peer.
279282
"""
283+
self.ca_cert_data = ca_cert_data
284+
"""Set this to verify the peer using PEM (str) or DER (bytes)
285+
certificate data.
286+
"""
280287
self.cert_file = None
281288
"""client certificate file
282289
"""

samples/client/echo_api/python/openapi_client/rest.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ def __init__(self, configuration) -> None:
7777
"ca_certs": configuration.ssl_ca_cert,
7878
"cert_file": configuration.cert_file,
7979
"key_file": configuration.key_file,
80+
"ca_cert_data": configuration.ca_cert_data,
8081
}
8182
if configuration.assert_hostname is not None:
8283
pool_args['assert_hostname'] = (

samples/openapi3/client/petstore/python-aiohttp/petstore_api/configuration.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import logging
1818
from logging import FileHandler
1919
import sys
20-
from typing import Any, ClassVar, Dict, List, Literal, Optional, TypedDict
20+
from typing import Any, ClassVar, Dict, List, Literal, Optional, TypedDict, Union
2121
from typing_extensions import NotRequired, Self
2222

2323
import urllib3
@@ -168,6 +168,8 @@ class Configuration:
168168
:param ssl_ca_cert: str - the path to a file of concatenated CA certificates
169169
in PEM format.
170170
:param retries: Number of retries for API requests.
171+
:param ca_cert_data: verify the peer using concatenated CA certificate data
172+
in PEM (str) or DER (bytes) format.
171173
172174
:Example:
173175
@@ -257,13 +259,14 @@ def __init__(
257259
password: Optional[str]=None,
258260
access_token: Optional[str]=None,
259261
signing_info: Optional[HttpSigningConfiguration]=None,
260-
server_index: Optional[int]=None,
262+
server_index: Optional[int]=None,
261263
server_variables: Optional[ServerVariablesT]=None,
262264
server_operation_index: Optional[Dict[int, int]]=None,
263265
server_operation_variables: Optional[Dict[int, ServerVariablesT]]=None,
264266
ignore_operation_servers: bool=False,
265267
ssl_ca_cert: Optional[str]=None,
266268
retries: Optional[int] = None,
269+
ca_cert_data: Optional[Union[str, bytes]] = None,
267270
*,
268271
debug: Optional[bool] = None,
269272
) -> None:
@@ -346,6 +349,10 @@ def __init__(
346349
self.ssl_ca_cert = ssl_ca_cert
347350
"""Set this to customize the certificate file to verify the peer.
348351
"""
352+
self.ca_cert_data = ca_cert_data
353+
"""Set this to verify the peer using PEM (str) or DER (bytes)
354+
certificate data.
355+
"""
349356
self.cert_file = None
350357
"""client certificate file
351358
"""

samples/openapi3/client/petstore/python-aiohttp/petstore_api/rest.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ def __init__(self, configuration) -> None:
5757
self.maxsize = configuration.connection_pool_maxsize
5858

5959
self.ssl_context = ssl.create_default_context(
60-
cafile=configuration.ssl_ca_cert
60+
cafile=configuration.ssl_ca_cert,
61+
cadata=configuration.ca_cert_data,
6162
)
6263
if configuration.cert_file:
6364
self.ssl_context.load_cert_chain(

samples/openapi3/client/petstore/python/petstore_api/configuration.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from logging import FileHandler
1919
import multiprocessing
2020
import sys
21-
from typing import Any, ClassVar, Dict, List, Literal, Optional, TypedDict
21+
from typing import Any, ClassVar, Dict, List, Literal, Optional, TypedDict, Union
2222
from typing_extensions import NotRequired, Self
2323

2424
import urllib3
@@ -169,6 +169,8 @@ class Configuration:
169169
:param ssl_ca_cert: str - the path to a file of concatenated CA certificates
170170
in PEM format.
171171
:param retries: Number of retries for API requests.
172+
:param ca_cert_data: verify the peer using concatenated CA certificate data
173+
in PEM (str) or DER (bytes) format.
172174
173175
:Example:
174176
@@ -258,13 +260,14 @@ def __init__(
258260
password: Optional[str]=None,
259261
access_token: Optional[str]=None,
260262
signing_info: Optional[HttpSigningConfiguration]=None,
261-
server_index: Optional[int]=None,
263+
server_index: Optional[int]=None,
262264
server_variables: Optional[ServerVariablesT]=None,
263265
server_operation_index: Optional[Dict[int, int]]=None,
264266
server_operation_variables: Optional[Dict[int, ServerVariablesT]]=None,
265267
ignore_operation_servers: bool=False,
266268
ssl_ca_cert: Optional[str]=None,
267269
retries: Optional[int] = None,
270+
ca_cert_data: Optional[Union[str, bytes]] = None,
268271
*,
269272
debug: Optional[bool] = None,
270273
) -> None:
@@ -347,6 +350,10 @@ def __init__(
347350
self.ssl_ca_cert = ssl_ca_cert
348351
"""Set this to customize the certificate file to verify the peer.
349352
"""
353+
self.ca_cert_data = ca_cert_data
354+
"""Set this to verify the peer using PEM (str) or DER (bytes)
355+
certificate data.
356+
"""
350357
self.cert_file = None
351358
"""client certificate file
352359
"""

0 commit comments

Comments
 (0)