U
    d                     @   s   d Z ddlmZ ddlmZ dZzddlmZ W n> e	k
rn   zddl
mZ W n e	k
rh   dZY nX Y nX erddlZddlmZmZ ejZdZejZejZee ee ee ee eeeej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.    )OptionalConfigurationErrorTNF)	CERT_NONECERT_REQUIRED)certfile
passphraseca_certscrlfileallow_invalid_certificatesallow_invalid_hostnamesdisable_ocsp_endpoint_checkreturnc           
   
   C   sB  |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 n2 tjk
r }	 ztd|	 W 5 d}	~	X Y nX |dk	rtjrtdt|dttdd	 || |dk	r&|| n|t kr8|  ||_|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_flags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setattrgetattrload_verify_locationsload_default_certsverify_mode)
r   r   r	   r
   r   r   r   r#   ctxexc r&   7/tmp/pip-unpacked-wheel-oblwsawz/pymongo/ssl_support.pyget_ssl_context-   s8    



 



r(   c                   @   s   e Zd ZdS )r   N)__name__
__module____qualname__r&   r&   r&   r'   r   \   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(   c   s    )__doc__typingr   Zpymongo.errorsr   ZHAVE_SSLZpymongo.pyopenssl_contextZpyopenssl_contextr   ImportErrorZpymongo.ssl_contextssl_contextsslZ
_stdlibsslr   r   HAS_SNIZIPADDR_SAFEr   ZBLOCKING_IO_ERRORSstrboolr   r(   	Exceptionr&   r&   r&   r'   <module>   s>   /