U
    ~fh                     @  s:  d Z ddlmZ ddlZddlmZ ddlmZ dZzddl	m
Z W nj eefk
r Z zHeeertejdedd	 zddlmZ W n ek
r   d
ZY nX W 5 dZ[X Y nX erddlZddlmZmZ ejZdZejZejZejZejZeZdddddddddddZn$G dd de Zd
Zd
ZdZdd ZdS )zSupport for SSL in PyMongo.    )annotationsN)OptionalConfigurationErrorTzFailed to use the installed version of PyOpenSSL. Falling back to stdlib ssl, disabling OCSP support. This is likely caused by incompatible versions of PyOpenSSL < 23.2.0 and cryptography >= 42.0.0. Try updating PyOpenSSL >= 23.2.0 to enable OCSP.   )
stacklevelF)	CERT_NONECERT_REQUIREDzOptional[str]boolz_ssl.SSLContext)certfile
passphraseca_certscrlfileallow_invalid_certificatesallow_invalid_hostnamesdisable_ocsp_endpoint_checkreturnc           
   
   C  s>  |rt nt}ttj}|t kr*| |_nd|_t|drB| |_t|dr| jtj	O  _| jtj
O  _| jtjO  _| jtjO  _| dk	rz|| d| W n4 tjk
r }	 ztd|	 dW 5 d}	~	X Y nX |dk	rtjrtdttdd|_|| |dk	r"|| n|t kr4|  ||_|S )	z'Create and return an SSLContext object.Fcheck_ocsp_endpointoptionsNz'Private key doesn't match certificate: z(tlsCRLFile cannot be used with PyOpenSSLVERIFY_CRL_CHECK_LEAFr   )r   r	   _ssl
SSLContextPROTOCOL_SSLv23check_hostnamehasattrr   r   OP_NO_SSLv2OP_NO_SSLv3OP_NO_COMPRESSIONOP_NO_RENEGOTIATIONload_cert_chainSSLErrorr   IS_PYOPENSSLgetattrverify_flagsload_verify_locationsload_default_certsverify_mode)
r   r   r   r   r   r   r   r&   ctxexc r)   7/tmp/pip-unpacked-wheel-36gvocj8/pymongo/ssl_support.pyget_ssl_context<   s@    



"
  


r+   c                   @  s   e Zd ZdS )r    N)__name__
__module____qualname__r)   r)   r)   r*   r    m   s   r    r)   c                  G  s   t ddS )z(No ssl module, raise ConfigurationError.z The ssl module is not available.Nr   )dummyr)   r)   r*   r+   t   s    )!__doc__
__future__r   warningstypingr   Zpymongo.errorsr   ZHAVE_SSLZpymongo.pyopenssl_contextZpyopenssl_contextr   ImportErrorAttributeErrorr(   
isinstancewarnUserWarningZpymongo.ssl_contextssl_contextsslZ
_stdlibsslr   r	   HAS_SNIZIPADDR_SAFEr    ZBLOCKING_IO_ERRORSZBLOCKING_IO_READ_ERRORZBLOCKING_IO_WRITE_ERRORZBLOCKING_IO_LOOKUP_ERRORr+   	Exceptionr)   r)   r)   r*   <module>   sD   
	1