U
    +|ju!  ã                   @   s¶  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
mZ zd dlZW n ek
rl   dZY nX dddddgZd ¡  ¡ ZzejjZejjZW n ek
r¸   e ZZY nX edk	oÌeeefkZzd d	lmZmZ W nR ek
�r4   zd d
lmZ d dlmZ W n ek
�r.   dZdZY nX Y nX e�sLG dd„ deƒZe�sdddd„Zdd„ ZG dd„ deƒZG dd„ deƒZddd„Z dd„ Z!e!dd„ ƒZ"dd„ Z#dd„ Z$dS ) é    N)ÚResolutionErrorÚExtractionErrorÚVerifyingHTTPSHandlerÚfind_ca_bundleÚis_availableÚ
cert_pathsÚ
opener_fora  
/etc/pki/tls/certs/ca-bundle.crt
/etc/ssl/certs/ca-certificates.crt
/usr/share/ssl/certs/ca-bundle.crt
/usr/local/share/certs/ca-root.crt
/etc/ssl/cert.pem
/System/Library/OpenSSL/certs/cert.pem
/usr/local/share/certs/ca-root-nss.crt
/etc/ssl/ca-bundle.pem
)ÚCertificateErrorÚmatch_hostname)r	   )r
   c                   @   s   e Zd ZdS )r	   N)Ú__name__Ú
__module__Ú__qualname__© r   r   ú^C:\Users\snmko\Desktop\web_content\django_cbt\venv\Lib\site-packages\setuptools/ssl_support.pyr	   7   s   r	   é   c           
      C   sò   g }| sdS |   d¡}|d }|dd… }| d¡}||krLtdt| ƒ ƒ‚|s`|  ¡ | ¡ kS |dkrt| d¡ n>| d	¡sˆ| d	¡rš| t |¡¡ n| t |¡ 	d
d¡¡ |D ]}| t |¡¡ q¶t 
dd |¡ d tj¡}	|	 |¡S )zqMatching according to RFC 6125, section 6.4.3

        https://tools.ietf.org/html/rfc6125#section-6.4.3
        FÚ.r   r   NÚ*z,too many wildcards in certificate DNS name: z[^.]+zxn--z\*z[^.]*z\Az\.z\Z)ÚsplitÚcountr	   ÚreprÚlowerÚappendÚ
startswithÚreÚescapeÚreplaceÚcompileÚjoinÚ
IGNORECASEÚmatch)
ÚdnÚhostnameZmax_wildcardsZpatsÚpartsZleftmostÚ	remainderÚ	wildcardsÚfragÚpatr   r   r   Ú_dnsname_match=   s,    


ÿr'   c                 C   sì   | st dƒ‚g }|  dd¡}|D ]*\}}|dkr t||ƒr@ dS | |¡ q |s”|  dd¡D ]6}|D ],\}}|dkrdt||ƒr†  dS | |¡ qdq\t|ƒdkr¾td	|d
 tt|ƒ¡f ƒ‚n*t|ƒdkràtd||d f ƒ‚ntdƒ‚dS )a=  Verify that *cert* (in decoded format as returned by
        SSLSocket.getpeercert()) matches the *hostname*.  RFC 2818 and RFC 6125
        rules are followed, but IP addresses are not accepted for *hostname*.

        CertificateError is raised on failure. On success, the function
        returns nothing.
        zempty or no certificateÚsubjectAltNamer   ÚDNSNÚsubjectÚ
commonNamer   z&hostname %r doesn't match either of %sz, zhostname %r doesn't match %rr   z=no appropriate commonName or subjectAltName fields were found)	Ú
ValueErrorÚgetr'   r   Úlenr	   r   Úmapr   )Úcertr!   ÚdnsnamesÚsanÚkeyÚvalueÚsubr   r   r   r
   s   s>    

ÿÿ
ÿÿÿr
   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )r   z=Simple verifying handler: no auth, subclasses, timeouts, etc.c                 C   s   || _ t | ¡ d S ©N)Ú	ca_bundleÚHTTPSHandlerÚ__init__)Úselfr7   r   r   r   r9       s    zVerifyingHTTPSHandler.__init__c                    s   ˆ   ‡ fdd„|¡S )Nc                    s   t | ˆ jf|ŽS r6   )ÚVerifyingHTTPSConnr7   )ÚhostÚkw©r:   r   r   Ú<lambda>¦   ó    z2VerifyingHTTPSHandler.https_open.<locals>.<lambda>)Údo_open)r:   Úreqr   r>   r   Ú
https_open¤   s    
þz VerifyingHTTPSHandler.https_openN)r   r   r   Ú__doc__r9   rC   r   r   r   r   r   �   s   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )r;   z@Simple verifying connection: no auth, subclasses, timeouts, etc.c                 K   s   t j| |f|Ž || _d S r6   )ÚHTTPSConnectionr9   r7   )r:   r<   r7   r=   r   r   r   r9   ®   s    zVerifyingHTTPSConn.__init__c                 C   sÖ   t  | j| jft| dd ƒ¡}t| dƒrHt| dd ƒrH|| _|  ¡  | j}n| j}tt	dƒrxt	j
| jd�}|j||d�| _nt	j|t	j| jd�| _zt| j ¡ |ƒ W n. tk
rÐ   | j t j¡ | j ¡  ‚ Y nX d S )NÚsource_addressÚ_tunnelÚ_tunnel_hostÚcreate_default_context)Úcafile)Úserver_hostname)Ú	cert_reqsÚca_certs)ÚsocketÚcreate_connectionr<   ÚportÚgetattrÚhasattrÚsockrG   rH   ÚsslrI   r7   Úwrap_socketÚCERT_REQUIREDr
   Úgetpeercertr	   ÚshutdownÚ	SHUT_RDWRÚclose)r:   rS   Úactual_hostÚctxr   r   r   Úconnect²   s.    
 
ÿ
  ÿ
zVerifyingHTTPSConn.connectN)r   r   r   rD   r9   r]   r   r   r   r   r;   «   s   r;   c                 C   s   t j t| ptƒ ƒ¡jS )z@Get a urlopen() replacement that uses ca_bundle for verification)ÚurllibÚrequestÚbuild_openerr   r   Úopen)r7   r   r   r   r   Ó   s    ÿc                    s   t  ˆ ¡‡ fdd„ƒ}|S )Nc                     s   t ˆ dƒsˆ | |Žˆ _ˆ jS )NÚalways_returns)rR   rb   )ÚargsÚkwargs©Úfuncr   r   ÚwrapperÜ   s    
zonce.<locals>.wrapper)Ú	functoolsÚwraps)rf   rg   r   re   r   ÚonceÛ   s    rj   c                     sZ   zdd l } W n tk
r"   Y d S X G ‡ fdd„d| jƒ‰ ˆ ƒ }| d¡ | d¡ |jS )Nr   c                       s,   e Zd Z‡‡ fdd„Z‡‡ fdd„Z‡  ZS )z"get_win_certfile.<locals>.CertFilec                    s   t ˆ | ƒ ¡  t | j¡ d S r6   )Úsuperr9   ÚatexitÚregisterrZ   r>   ©ÚCertFileÚ	__class__r   r   r9   ì   s    z+get_win_certfile.<locals>.CertFile.__init__c                    s,   zt ˆ | ƒ ¡  W n tk
r&   Y nX d S r6   )rk   rZ   ÚOSErrorr>   rn   r   r   rZ   ð   s    z(get_win_certfile.<locals>.CertFile.close)r   r   r   r9   rZ   Ú__classcell__r   ©ro   )rp   r   ro   ë   s   ro   ÚCAÚROOT)ÚwincertstoreÚImportErrorro   ZaddstoreÚname)rv   Z	_wincertsr   rs   r   Úget_win_certfileä   s    

ry   c                  C   s$   t tjjtƒ} tƒ p"t| dƒp"tƒ S )z*Return an existing CA bundle path, or NoneN)ÚfilterÚosÚpathÚisfiler   ry   ÚnextÚ_certifi_where)Zextant_cert_pathsr   r   r   r   ü   s    ÿýc                
   C   s.   zt dƒ ¡ W S  tttfk
r(   Y nX d S )NÚcertifi)Ú
__import__Úwhererw   r   r   r   r   r   r   r     s    r   )r   )N)%r{   rN   rl   r   rh   Úurllib.requestr^   Úhttp.clientÚhttpÚpkg_resourcesr   r   rT   rw   Ú__all__Ústripr   r   r_   r8   ÚclientrE   ÚAttributeErrorÚobjectr   r	   r
   Zbackports.ssl_match_hostnamer,   r'   r   r;   r   rj   ry   r   r   r   r   r   r   Ú<module>   sb   
   þ
 ÿ
6*(
	

