Skip to content

Commit e270fdc

Browse files
committed
Merge pull request #1300 from geekerzp/python_client_cert
[Python] Support client certificate file and client key file in TLS/SSL
2 parents a2f4767 + cf1f113 commit e270fdc

File tree

4 files changed

+42
-2
lines changed

4 files changed

+42
-2
lines changed

modules/swagger-codegen/src/main/resources/python/configuration.mustache

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,10 @@ class Configuration(object):
9292
self.verify_ssl = True
9393
# Set this to customize the certificate file to verify the peer.
9494
self.ssl_ca_cert = None
95+
# client certificate file
96+
self.cert_file = None
97+
# client key file
98+
self.key_file = None
9599

96100
@property
97101
def logger_file(self):

modules/swagger-codegen/src/main/resources/python/rest.mustache

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,22 +72,38 @@ class RESTResponse(io.IOBase):
7272
class RESTClientObject(object):
7373

7474
def __init__(self, pools_size=4):
75+
# urllib3.PoolManager will pass all kw parameters to connectionpool
76+
# https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75
77+
# https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680
78+
# ca_certs vs cert_file vs key_file
79+
# http://stackoverflow.com/a/23957365/2985775
80+
81+
# cert_reqs
7582
if Configuration().verify_ssl:
7683
cert_reqs = ssl.CERT_REQUIRED
7784
else:
7885
cert_reqs = ssl.CERT_NONE
7986

87+
# ca_certs
8088
if Configuration().ssl_ca_cert:
8189
ca_certs = Configuration().ssl_ca_cert
8290
else:
8391
# if not set certificate file, use Mozilla's root certificates.
8492
ca_certs = certifi.where()
8593

94+
# cert_file
95+
cert_file = Configuration().cert_file
96+
97+
# key file
98+
key_file = Configuration().key_file
99+
86100
# https pool manager
87101
self.pool_manager = urllib3.PoolManager(
88102
num_pools=pools_size,
89103
cert_reqs=cert_reqs,
90-
ca_certs=ca_certs
104+
ca_certs=ca_certs,
105+
cert_file=cert_file,
106+
key_file=key_file
91107
)
92108

93109
def request(self, method, url, query_params=None, headers=None,

samples/client/petstore/python/swagger_client/configuration.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,10 @@ def __init__(self):
9292
self.verify_ssl = True
9393
# Set this to customize the certificate file to verify the peer.
9494
self.ssl_ca_cert = None
95+
# client certificate file
96+
self.cert_file = None
97+
# client key file
98+
self.key_file = None
9599

96100
@property
97101
def logger_file(self):

samples/client/petstore/python/swagger_client/rest.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,22 +72,38 @@ def getheader(self, name, default=None):
7272
class RESTClientObject(object):
7373

7474
def __init__(self, pools_size=4):
75+
# urllib3.PoolManager will pass all kw parameters to connectionpool
76+
# https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/poolmanager.py#L75
77+
# https://github.com/shazow/urllib3/blob/f9409436f83aeb79fbaf090181cd81b784f1b8ce/urllib3/connectionpool.py#L680
78+
# ca_certs vs cert_file vs key_file
79+
# http://stackoverflow.com/a/23957365/2985775
80+
81+
# cert_reqs
7582
if Configuration().verify_ssl:
7683
cert_reqs = ssl.CERT_REQUIRED
7784
else:
7885
cert_reqs = ssl.CERT_NONE
7986

87+
# ca_certs
8088
if Configuration().ssl_ca_cert:
8189
ca_certs = Configuration().ssl_ca_cert
8290
else:
8391
# if not set certificate file, use Mozilla's root certificates.
8492
ca_certs = certifi.where()
8593

94+
# cert_file
95+
cert_file = Configuration().cert_file
96+
97+
# key file
98+
key_file = Configuration().key_file
99+
86100
# https pool manager
87101
self.pool_manager = urllib3.PoolManager(
88102
num_pools=pools_size,
89103
cert_reqs=cert_reqs,
90-
ca_certs=ca_certs
104+
ca_certs=ca_certs,
105+
cert_file=cert_file,
106+
key_file=key_file
91107
)
92108

93109
def request(self, method, url, query_params=None, headers=None,

0 commit comments

Comments
 (0)