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 | rt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rt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	rt| 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rt| 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st	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. 
