
    hJ                        d Z ddlZddlZddlZddlmZ ddlmZ dZ	 ddl	m
Z dZ	 ddlZdZdZ	 ddlmZ dZ ej(                         ZdaerSddlZddlmZmZmZ ej8                  Zej:                  xs ej<                  dd	 d
k\  Zej@                  Z d Z!d Z"d Z#d Z$y G d de%      Z dZdZd Z!d Z"d Z$y# e$ r 	 ddlmZ n# e$ r dZY nw xY wY w xY w# e$ r Y w xY w# e$ r Y w xY w)zSupport for SSL in PyMongo.    N)string_typeConfigurationErrorTF)CertFile)	CERT_NONECERT_OPTIONALCERT_REQUIRED   )      c                     ||S t        |t              r t        t        |      rt	        t        |      }|t
        t        t        fv r|S t        d| d      )zValidate 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``.
        The value of zL must be one of: `ssl.CERT_NONE`, `ssl.CERT_OPTIONAL` or `ssl.CERT_REQUIRED`)	
isinstancer   hasattr
_stdlibsslgetattrr   r   r	   
ValueError)optionvalues     V/var/www/html/ranktracker/api/venv/lib/python3.12/site-packages/pymongo/ssl_support.pyvalidate_cert_reqsr   =   sV    
 =Le[)gj%.HJ.EY}==L28; < 	<    c                 <    ddl m}  || |      }|rt        S t        S )z;Validate the option to allow invalid certificates is valid.r   )validate_boolean_or_string)pymongo.commonr   r   r	   )r   r   r   boolean_cert_reqss       r   validate_allow_invalid_certsr   M   s#     	>6vuEr   c                      t               } | j                  d       | j                  d       t        j                  | j                         | ay)z6Set _WINCERTS to an instance of wincertstore.Certfile.CAROOTN)r   addstoreatexitregisterclose	_WINCERTS)certfiles    r   _load_wincertsr'   V   s<     :$&!'	r   c                  |   | \  }}}}}}}}|t         n|}	t        j                  t        j                        }
t	        |
d      r(t        j
                  r|	t        k7  r||
_        nd|
_        t	        |
d      r||
_        t	        |
d      r|
xj                  t        j                  z  c_	        |
xj                  t        j                  z  c_	        |
xj                  t        j                  z  c_	        |
xj                  t        j                  z  c_	        |	 |
j                  |||       |Yt        j"                  rt!        d      t	        |
d      st!        d	      t%        t        d
d      |
_        |
j)                  |       ||
j)                  |       n|t        k7  rt	        |
d      r|
j+                          nt,        j.                  dk7  rt	        |
d      r|
j1                          nt,        j.                  dk(  rEt2        r?t4        5  t6        
t9                ddd       |
j)                  t6        j:                         n5t<        r$|
j)                  t?        j@                                nt!        d      |	|
_!        |
S # t        j                  $ r}t!        d|      d}~ww xY w# 1 sw Y   xY w)z'Create and return an SSLContext object.Ncheck_hostnameFcheck_ocsp_endpointoptionsz'Private key doesn't match certificate: z)ssl_crlfile cannot be used with PyOpenSSLverify_flagszESupport for ssl_crlfile requires python 2.7.9+ (pypy 2.5.1+) or  3.4+VERIFY_CRL_CHECK_LEAFr   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	   _ssl
SSLContextPROTOCOL_SSLv23r   CHECK_HOSTNAME_SAFEr   r)   r*   r+   OP_NO_SSLv2OP_NO_SSLv3OP_NO_COMPRESSIONOP_NO_RENEGOTIATIONload_cert_chainSSLErrorr   IS_PYOPENSSLr   r,   load_verify_locationsr.   sysplatformr0   HAVE_WINCERTSTORE_WINCERTSLOCKr%   r'   nameHAVE_CERTIFIcertifiwhereverify_mode)argsr&   keyfile
passphraseca_certs	cert_reqscrlfilematch_hostnamer*   rE   ctxexcs               r   get_ssl_contextrO   a   s^    !%								'0'8miood2233()''K9,D%3"%*"3-.&9C#3	"
 KK4+++KKK4+++KKK4111KKK4333KJ##HgzB   (?A A3/(;< <  't-DaHC%%g.%%h/)#s01&&(,,')#9:,,.(->" ) (&() )))..9))'--/:( ! ! &
K == J(CFHJ JJ2) )s$   J	 J2	J/J**J/2J;c                       e Zd Zy)r:   N)__name__
__module____qualname__ r   r   r:   r:      s    r   r:   c                      t        d| d      )(No ssl module, raise ConfigurationError.r   z? is set but can't be validated. The ssl module is not availabler   r   dummys     r   r   r      s     $*"- . 	.r   c                     t        | |      S )rV   )r   rW   s     r   r   r      s    !&%00r   c                      t        d      )rV   z The ssl module is not available.r   )rX   s    r   rO   rO      s     !CDDr   )&__doc__r"   r=   	threadingbson.py3compatr   pymongo.errorsr   HAVE_SSLpymongo.pyopenssl_contextpyopenssl_contextr1   ImportErrorpymongo.ssl_contextssl_contextrB   rC   r?   wincertstorer   Lockr@   r%   sslr   r   r   r	   HAS_SNIr;   version_infoIPADDR_SAFEr:   r   r   r'   rO   	ExceptionrT   r   r   <module>rl      s7   "  
  & -, 	L  	% 	 	
 ;;llG##Es'7'7';v'EK}}H< 	EN9 GK.1Eu  *   		  		sW   B9 C C$ 9C?CCCCCCCC! C!$C,+C,