U
    ˜¤Œ].  ã                   @   sl  d dl Z d dlZd dlZd dlmZ d dlZddlmZ ddlmZm	Z	 ej
eejeef ejeeef f Zej
eeejf Zej
eejeeef df Zej
eeje eje df Zde› �Zd	d
dœZd ddddddddddddddg¡Ze	eƒZG dd„ dƒZG dd„ dƒZG dd„ dƒZG dd „ d ƒZedd!d"�Zed#d$�Z ed%d&d#d'�Z!ee "¡ ƒZ#d(Z$dS ))é    N)ÚPathé   )Ú__version__)Úget_ca_bundle_from_envÚ
get_loggerÚTimeoutConfigÚHTTPVersionConfigzpython-httpx/zhttp/1.1Zh2©úHTTP/1.1úHTTP/2ú:zECDHE+AESGCMzECDHE+CHACHA20z
DHE+AESGCMzDHE+CHACHA20zECDH+AESGCMz	DH+AESGCMzECDH+AESzDH+AESz
RSA+AESGCMzRSA+AESz!aNULLz!eNULLz!MD5z!DSSc                   @   s¼   e Zd ZdZddddœeeedœdd„Zej	edœdd	„Z
ed
œdd„Zdeed dœdd„Zddejdœdd„Zdejdœdd„Zdejdœdd„Zdejdœdd„Zejddœdd„ZdS )Ú	SSLConfigz
    SSL Configuration.
    NT)ÚcertÚverifyÚ	trust_envc                C   s>   || _ d }t|tjƒr(|}d}|  |¡ || _|| _|| _d S )NT)r   Ú
isinstanceÚsslÚ
SSLContextÚ_load_client_certsÚssl_contextr   r   )Úselfr   r   r   r   © r   úl/var/www/html/staging.mfahmagazine.net/magazine_api/magazine_env/lib/python3.8/site-packages/httpx/config.pyÚ__init__3   s    
zSSLConfig.__init__©ÚotherÚreturnc                 C   s$   t || jƒo"| j|jko"| j|jkS ©N)r   Ú	__class__r   r   ©r   r   r   r   r   Ú__eq__H   s
    
ÿ
ýzSSLConfig.__eq__©r   c                 C   s"   | j j}|› d| j› d| j› d�S )Nz(cert=z	, verify=ú))r   Ú__name__r   r   ©r   Ú
class_namer   r   r   Ú__repr__O   s    zSSLConfig.__repr__)r   r   r   c                 C   sH   |d kr| j n|}|d kr | jn|}|| j kr<|| jkr<| S t||d�S )N©r   r   )r   r   r   )r   r   r   r   r   r   Úwith_overridesS   s
    zSSLConfig.with_overridesr   )Úhttp_versionsr   c              
   C   sx   |d krt ƒ n|}t d| j›d| j›d| j›d|›�¡ | jd krd| jrV| j|d�n
| j|d�| _| jd k	srt	‚| jS )Nzload_ssl_context verify=z cert=z trust_env=z http_versions=©r)   )
r   ÚloggerÚdebugr   r   r   r   Úload_ssl_context_verifyÚload_ssl_context_no_verifyÚAssertionError)r   r)   r   r   r   Úload_ssl_context\   s     ÿ
ÿ
ýzSSLConfig.load_ssl_contextc                 C   s   | j |d�}tj|_d|_|S )zC
        Return an SSL context for unverified connections.
        r*   F)Ú_create_default_ssl_contextr   Z	CERT_NONEÚverify_modeÚcheck_hostname)r   r)   Úcontextr   r   r   r.   s   s    z$SSLConfig.load_ssl_context_no_verifyc                 C   s  | j r$| jdkr$tƒ }|dk	r$|| _t| jtƒr6t}n*t| jƒ ¡ rPt| jƒ}ntd 	| j¡ƒ‚| j
|d�}tj|_d|_z
d|_W n tk
r˜   Y nX z
d|_W n tk
r¸   Y nX | ¡ rät d|›�¡ |jt|ƒd� n*| ¡ �rt d|›�¡ |jt|ƒd	� |  |¡ |S )
zA
        Return an SSL context for verified connections.
        TNzECould not find a suitable TLS CA certificate bundle, invalid path: {}r*   Fzload_verify_locations cafile=)Zcafilezload_verify_locations capath=)Zcapath)r   r   r   r   ÚboolÚDEFAULT_CA_BUNDLE_PATHr   ÚexistsÚIOErrorÚformatr1   r   ZCERT_REQUIREDr2   r3   Zpost_handshake_authÚAttributeErrorZhostname_checks_common_nameÚis_filer+   r,   Zload_verify_locationsÚstrÚis_dirr   )r   r)   Z	ca_bundleZca_bundle_pathr4   r   r   r   r-   ~   s@    ÿÿ



z!SSLConfig.load_ssl_context_verifyc                 C   s¢   t  t j¡}| jt jO  _| jt jO  _| jt jO  _| jt jO  _| jt jO  _| 	t
¡ t jrx| |j¡ t|dƒržtj d¡}|rž| jrž||_|S )zy
        Creates the default SSLContext object that's used for both verified
        and unverified connections.
        Úkeylog_filenameZSSLKEYLOGFILE)r   r   ZPROTOCOL_TLSÚoptionsZOP_NO_SSLv2ZOP_NO_SSLv3ZOP_NO_TLSv1ZOP_NO_TLSv1_1ZOP_NO_COMPRESSIONZset_ciphersÚDEFAULT_CIPHERSZHAS_ALPNZset_alpn_protocolsÚalpn_identifiersÚhasattrÚosÚenvironÚgetr   r>   )r   r)   r4   Z
keylogfiler   r   r   r1   °   s    


z%SSLConfig._create_default_ssl_context)r   r   c                 C   sœ   | j dk	r˜t| j tƒr&|j| j d� nrt| j tƒr\t| j ƒdkr\|j| j d | j d d� n<t| j tƒr˜t| j ƒdkr˜|j| j d | j d | j d d� dS )	zF
        Loads client certificates into our SSLContext object
        N)Úcertfileé   r   r   )rF   Úkeyfileé   )rF   rH   Úpassword)r   r   r<   Zload_cert_chainÚtupleÚlen)r   r   r   r   r   r   É   s    
ýzSSLConfig._load_client_certs)NN)N)r#   Ú
__module__Ú__qualname__Ú__doc__Ú	CertTypesÚVerifyTypesr5   r   ÚtypingÚAnyr    r<   r&   r(   r   r   r0   r.   r-   r1   r   r   r   r   r   r   .   sB   ûû   ÿ þ
 ÿþþþ3þr   c                   @   sP   e Zd ZdZdddddœeeeedœdd„Zeje	dœdd	„Z
ed
œdd„ZdS )r   z
    Timeout values.
    N)Úconnect_timeoutÚread_timeoutÚwrite_timeout)ÚtimeoutrT   rU   rV   c                C   s¤   |d kr|| _ || _|| _n„|d ks(t‚|d ks4t‚|d ks@t‚t|tƒrd|j | _ |j| _|j| _n<t|tƒrŽ|d | _ |d | _|d | _n|| _ || _|| _d S )Nr   r   rG   )rT   rU   rV   r/   r   r   rK   )r   rW   rT   rU   rV   r   r   r   r   ß   s$    




zTimeoutConfig.__init__r   c                 C   s0   t || jƒo.| j|jko.| j|jko.| j|jkS r   )r   r   rT   rU   rV   r   r   r   r   r    ý   s    
ÿ
þ
üzTimeoutConfig.__eq__r!   c                 C   sT   | j j}t| j| j| jhƒdkr2|› d| j› d�S |› d| j› d| j› d| j› d�S )Nr   z	(timeout=r"   z(connect_timeout=z, read_timeout=z, write_timeout=)r   r#   rL   rT   rU   rV   r$   r   r   r   r&     s
     ÿzTimeoutConfig.__repr__)N)r#   rM   rN   rO   ÚTimeoutTypesÚfloatr   rR   rS   r5   r    r<   r&   r   r   r   r   r   Ú   s    þúúc                   @   sF   e Zd ZdZdedœdd„Zeeje	 dœdd„ƒZ
e	dœd	d
„ZdS )r   z?
    Configure which HTTP protocol versions are supported.
    Nr*   c                 C   s¢   |d krddg}t |tƒr(| ¡ h| _nDt |tƒr<|j| _n0t |tjƒrZdd„ |D ƒ| _ntdt|ƒ› �ƒ‚| jD ]}|dkrrt	d|›d�ƒ‚qr| jsžt	d	ƒ‚d S )
Nr
   r   c                 S   s"   h | ]}t |tƒr| ¡ n|’qS r   )r   r<   Úupper©Ú.0Úversionr   r   r   Ú	<setcomp>  s   ÿz-HTTPVersionConfig.__init__.<locals>.<setcomp>z<HTTP version should be a string or list of strings, but got r	   zUnsupported HTTP version Ú.z&HTTP versions cannot be an empty list.)
r   r<   rZ   r)   r   rR   ÚIterableÚ	TypeErrorÚtypeÚ
ValueError)r   r)   r]   r   r   r   r     s$    


þ
ÿ
zHTTPVersionConfig.__init__r!   c                 C   s   dd„ | j D ƒS )zb
        Returns a list of supported ALPN identifiers. (One or more of "http/1.1", "h2").
        c                 S   s   g | ]}t | ‘qS r   )Ú!HTTP_VERSIONS_TO_ALPN_IDENTIFIERSr[   r   r   r   Ú
<listcomp>3  s    z6HTTPVersionConfig.alpn_identifiers.<locals>.<listcomp>r*   )r   r   r   r   rA   .  s    ÿz"HTTPVersionConfig.alpn_identifiersc                 C   s&   | j j}tt| jƒƒ}|› d|›d�S )Nú(r"   )r   r#   ÚsortedÚlistr)   )r   r%   Úvaluer   r   r   r&   7  s    zHTTPVersionConfig.__repr__)N)r#   rM   rN   rO   ÚHTTPVersionTypesr   ÚpropertyrR   ÚListr<   rA   r&   r   r   r   r   r     s
   c                   @   sL   e Zd ZdZddddœeeedœdd„Zeje	dœdd„Z
ed	œd
d„ZdS )Ú
PoolLimitszC
    Limits on the number of connections in a connection pool.
    N©Ú
soft_limitÚ
hard_limitÚpool_timeoutc                C   s   || _ || _|| _d S r   rn   )r   ro   rp   rq   r   r   r   r   B  s    zPoolLimits.__init__r   c                 C   s0   t || jƒo.| j|jko.| j|jko.| j|jkS r   )r   r   ro   rp   rq   r   r   r   r   r    M  s    
ÿ
þ
üzPoolLimits.__eq__r!   c                 C   s*   | j j}|› d| j› d| j› d| j› d�S )Nz(soft_limit=z, hard_limit=z, pool_timeout=r"   )r   r#   ro   rp   rq   r$   r   r   r   r&   U  s     ÿzPoolLimits.__repr__)r#   rM   rN   rO   ÚintrY   r   rR   rS   r5   r    r<   r&   r   r   r   r   rm   =  s   ûûrm   Tr'   g      @)rW   é
   éd   rn   é   )%rC   r   rR   Úpathlibr   Úcertifir   Úutilsr   r   ÚUnionr<   ZTuplerP   r5   r   rQ   rY   rX   rl   rj   Z
USER_AGENTrd   Újoinr@   r#   r+   r   r   r   rm   ZDEFAULT_SSL_CONFIGZDEFAULT_TIMEOUT_CONFIGZDEFAULT_POOL_LIMITSÚwherer6   ZDEFAULT_MAX_REDIRECTSr   r   r   r   Ú<module>   sT   &ÿ

òÿ -5. 
