o
    ºîï]v   ã                   @   sB  d Z ddlZddlZddlZdZzddlZW n ey!   dZY nw dZzddlZdZW n	 ey5   Y nw dZ	z
ddl
mZ dZ	W n	 eyK   Y nw ddlmZ ddlmZ e ¡ Zdaejdd… d	kZer“zdd
lmZ W n ey€   dd
lmZ Y nw dd„ Zdd„ Zdd„ Zdd„ ZdS dd„ Zdd„ Zdd„ ZdS )zSupport for SSL in PyMongo.é    NTF)ÚCertFile)Ústring_type©ÚConfigurationErroré   )é   é   )Ú
SSLContextc                 C   sP   |du r|S t |tƒrtt|ƒrtt|ƒ}|tjtjtjfv r!|S td| f ƒ‚)z¨Validate the cert reqs are valid. It must be None or one of the
        three values ``ssl.CERT_NONE``, ``ssl.CERT_OPTIONAL`` or
        ``ssl.CERT_REQUIRED``.
        Nz[The value of %s must be one of: `ssl.CERT_NONE`, `ssl.CERT_OPTIONAL` or `ssl.CERT_REQUIRED`)	Ú
isinstancer   ÚhasattrÚsslÚgetattrÚ	CERT_NONEÚCERT_OPTIONALÚCERT_REQUIREDÚ
ValueError)ÚoptionÚvalue© r   úE/var/www/html/env/lib/python3.10/site-packages/pymongo/ssl_support.pyÚvalidate_cert_reqs8   s   
þr   c                 C   s&   ddl m} || |ƒ}|rtjS tjS )z;Validate the option to allow invalid certificates is valid.r   )Úvalidate_boolean_or_string)Úpymongo.commonr   r   r   r   )r   r   r   Úboolean_cert_reqsr   r   r   Úvalidate_allow_invalid_certsH   s
   
r   c                  C   s.   t ƒ } |  d¡ |  d¡ t | j¡ | adS )z6Set _WINCERTS to an instance of wincertstore.Certfile.ÚCAÚROOTN)r   ÚaddstoreÚatexitÚregisterÚcloseÚ	_WINCERTS)Úcertfiler   r   r   Ú_load_wincertsQ   s
   

r#   c               
   G   sH  | \}}}}}}}|du rt jn|}ttt dt jƒƒ}	t|	dƒr.tr+|t jkr+||	_nd|	_t|	dƒr_|	 j	tt ddƒO  _	|	 j	tt ddƒO  _	|	 j	tt d	dƒO  _	|	 j	tt d
dƒO  _	|dur§z/|dur‹t
j}
|
d dkru|
dk s|
d dkrƒ|
dk rƒtdƒ‚|	 |||¡ n|	 ||¡ W n t jy¦ } ztd|f ƒ‚d}~ww |dur½t|	dƒs´tdƒ‚t j|	_|	 |¡ |durÇ|	 |¡ nX|t jk�rt|	dƒr×|	 ¡  nHt
jdkræt|	dƒræ|	 ¡  n9t
jdk�rt�rt� tdu rùtƒ  W d  ƒ n	1 �sw   Y  |	 tj¡ nt�r|	 t ¡ ¡ ntdƒ‚||	_|	S )z'Create and return an SSLContext object.NÚPROTOCOL_TLS_CLIENTÚcheck_hostnameFÚoptionsÚOP_NO_SSLv2r   ÚOP_NO_SSLv3ÚOP_NO_COMPRESSIONÚOP_NO_RENEGOTIATIONr   )r   r   é	   r   )r   r   zKSupport for ssl_pem_passphrase requires python 2.7.9+ (pypy 2.5.1+) or 3.3+z)Private key doesn't match certificate: %sÚverify_flagszESupport for ssl_crlfile requires python 2.7.9+ (pypy 2.5.1+) or  3.4+Úload_default_certsÚwin32Úset_default_verify_pathszo`ssl_cert_reqs` is not ssl.CERT_NONE and no system CA certificates could be loaded. `ssl_ca_certs` is required.)r   r   r	   r   ÚPROTOCOL_SSLv23r   Ú	_PY37PLUSr   r%   r&   ÚsysÚversion_infor   Úload_cert_chainÚSSLErrorÚVERIFY_CRL_CHECK_LEAFr,   Úload_verify_locationsr-   Úplatformr/   ÚHAVE_WINCERTSTOREÚ_WINCERTSLOCKr!   r#   ÚnameÚHAVE_CERTIFIÚcertifiÚwhereÚverify_mode)Úargsr"   ÚkeyfileÚ
passphraseÚca_certsÚ	cert_reqsÚcrlfileÚmatch_hostnamer?   ÚctxÚviÚexcr   r   r   Úget_ssl_contextc   sŠ   úÿ

ÿ€ÿ€ÿ
ÿ



ÿ
€þÿrJ   c                 C   s   t d| f ƒ‚)ú(No ssl module, raise ConfigurationError.zNThe value of %s is set but can't be validated. The ssl module is not availabler   ©r   Údummyr   r   r   r   À   s   þc                 C   s
   t | |ƒS )rK   )r   rL   r   r   r   r   Æ   s   
c                  G   s   t dƒ‚)rK   z The ssl module is not available.r   )rM   r   r   r   rJ   Ê   s   )Ú__doc__r   r2   Ú	threadingÚHAVE_SSLr   ÚImportErrorr<   r=   r9   Úwincertstorer   Úbson.py3compatr   Úpymongo.errorsr   ÚLockr:   r!   r3   r1   r	   Úpymongo.ssl_contextr   r   r#   rJ   r   r   r   r   Ú<module>   sT   ÿÿÿÿ	]