MCPcopy Index your code
hub / github.com/mongodb/mongo-python-driver / kms_request

Method kms_request

pymongo/synchronous/encryption.py:166–250  ·  view source on GitHub ↗

Complete a KMS request. :param kms_context: A :class:`MongoCryptKmsContext`. :return: None

(self, kms_context: MongoCryptKmsContext)

Source from the content-addressed store, hash-verified

164 self._kms_ssl_contexts = opts._kms_ssl_contexts(_IS_SYNC)
165
166 def kms_request(self, kms_context: MongoCryptKmsContext) -> None:
167 """Complete a KMS request.
168
169 :param kms_context: A :class:`MongoCryptKmsContext`.
170
171 :return: None
172 """
173 endpoint = kms_context.endpoint
174 message = kms_context.message
175 provider = kms_context.kms_provider
176 ctx = self._kms_ssl_contexts.get(provider)
177 if ctx is None:
178 # Enable strict certificate verification, OCSP, match hostname, and
179 # SNI using the system default CA certificates.
180 ctx = get_ssl_context(
181 None, # certfile
182 None, # passphrase
183 None, # ca_certs
184 None, # crlfile
185 False, # allow_invalid_certificates
186 False, # allow_invalid_hostnames
187 False, # disable_ocsp_endpoint_check
188 _IS_SYNC,
189 )
190 # CSOT: set timeout for socket creation.
191 connect_timeout = max(_csot.clamp_remaining(_KMS_CONNECT_TIMEOUT), 0.001)
192 opts = PoolOptions(
193 connect_timeout=connect_timeout,
194 socket_timeout=connect_timeout,
195 ssl_context=ctx,
196 )
197 address = parse_host(endpoint, _HTTPS_PORT)
198 sleep_u = kms_context.usleep
199 if sleep_u:
200 sleep_sec = float(sleep_u) / 1e6
201 time.sleep(sleep_sec)
202 try:
203 conn = _connect_kms(address, opts)
204 try:
205 sendall(conn, message)
206 while kms_context.bytes_needed > 0:
207 # CSOT: update timeout.
208 conn.settimeout(max(_csot.clamp_remaining(_KMS_CONNECT_TIMEOUT), 0))
209 data: memoryview | bytes
210 if _IS_SYNC:
211 data = conn.recv(kms_context.bytes_needed)
212 else:
213 from pymongo.network_layer import ( # type: ignore[attr-defined]
214 receive_data_socket,
215 )
216
217 data = receive_data_socket(conn, kms_context.bytes_needed)
218 if not data:
219 raise OSError("KMS connection closed")
220 kms_context.feed(data)
221 except MongoCryptError:
222 raise # Propagate MongoCryptError errors directly.
223 except Exception as exc:

Callers

nothing calls this directly

Calls 12

get_ssl_contextFunction · 0.90
PoolOptionsClass · 0.90
parse_hostFunction · 0.90
sendallFunction · 0.90
_get_timeout_detailsFunction · 0.90
recvMethod · 0.80
_connect_kmsFunction · 0.70
getMethod · 0.45
settimeoutMethod · 0.45
timeoutMethod · 0.45
closeMethod · 0.45

Tested by

no test coverage detected