o
    h.                     @   sT  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g d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dededefdd	Zd
ej	defddZ
defddZ	ddededd fddZ	d dddejfddZdddejfddZdddejfddZdddejfddZdejddfddZdS )!	SSLConfigz
    SSL Configuration.
    NT)certverify	trust_envr   r   r   c                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   T/var/www/html/magazine_api/magazine_env/lib/python3.10/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__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__c                 C   sH   |d u r| j n|}|d u 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_overrideshttp_versionsr   c              
   C   sx   |d u rt  n|}td| jd| jd| jd| | jd u r2| jr+| j|dn| j|d| _| jd us9J | 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)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   	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u rt }|dur|| _t| jtrt}nt| j r(t| j}ntd	| j| j
|d}tj|_d|_zd|_W n	 tyK   Y nw zd|_W n	 tyZ   Y nw | rptd| |jt|d n| rt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=)cafilezload_verify_locations capath=)capath)r   r   r   r   boolDEFAULT_CA_BUNDLE_PATHr   existsIOErrorformatr.   r   CERT_REQUIREDr0   r1   post_handshake_authAttributeErrorhostname_checks_common_nameis_filer)   r*   load_verify_locationsstris_dirr   )r   r'   Z	ca_bundleZca_bundle_pathr2   r   r   r   r+   ~   sB   


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r<||j t|drOtjd}|rO| jrO||_|S )zy
        Creates the default SSLContext object that's used for both verified
        and unverified connections.
        keylog_filenameSSLKEYLOGFILE)r   r   PROTOCOL_TLSoptionsOP_NO_SSLv2OP_NO_SSLv3OP_NO_TLSv1OP_NO_TLSv1_1OP_NO_COMPRESSIONset_ciphersDEFAULT_CIPHERSHAS_ALPNset_alpn_protocolsalpn_identifiershasattrosenvirongetr   rB   )r   r'   r2   
keylogfiler   r   r   r.      s   


z%SSLConfig._create_default_ssl_contextr   c                 C   s   | j durPt| j tr|j| j d dS t| j tr0t| j dkr0|j| j d | j d d dS t| j trRt| j dkrT|j| j d | j d | j d d dS dS dS dS )	zF
        Loads client certificates into our SSLContext object
        N)certfile   r   r   )rU   keyfile   )rU   rW   password)r   r   r@   load_cert_chaintuplelen)r   r   r   r   r   r      s   

zSSLConfig._load_client_certs)NNr   )r!   
__module____qualname____doc__	CertTypesVerifyTypesr5   r   typingAnyr   r@   r$   r&   r   r   r-   r,   r+   r.   r   r   r   r   r   r   .   sX    





2
r   c                
   @   sZ   e Zd ZdZ	ddddddedededefdd	Zd
ejde	fddZ
defddZdS )r   z
    Timeout values.
    N)connect_timeoutread_timeoutwrite_timeouttimeoutrd   re   rf   c                C   s   |d u r|| _ || _|| _d S |d u sJ |d u sJ |d u s!J t|tr4|j | _ |j| _|j| _d S t|trJ|d | _ |d | _|d | _d S || _ || _|| _d S )Nr   r   rV   )rd   re   rf   r   r   r[   )r   rg   rd   re   rf   r   r   r   r      s$   





zTimeoutConfig.__init__r   r   c                 C   0   t || jo| j|jko| j|jko| j|jkS r   )r   r   rd   re   rf   r   r   r   r   r         


zTimeoutConfig.__eq__c                 C   sT   | j j}t| j| j| jhdkr| 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!   r\   rd   re   rf   r"   r   r   r   r$     s   zTimeoutConfig.__repr__r   )r!   r]   r^   r_   TimeoutTypesfloatr   rb   rc   r5   r   r@   r$   r   r   r   r   r      s$    
c                   @   sF   e Zd ZdZddefddZedeje	 fddZ
de	fd	d
ZdS )r   z?
    Configure which HTTP protocol versions are supported.
    Nr'   c                 C   s   |d u rddg}t |tr| h| _n"t |tr|j| _nt |tjr-dd |D | _n	tdt| | jD ]}|dvrGt	d|dq9| jsOt	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@   rl   r'   r   rb   Iterable	TypeErrortype
ValueError)r   r'   ro   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_IDENTIFIERSrm   r   r   r   
<listcomp>3  s    z6HTTPVersionConfig.alpn_identifiers.<locals>.<listcomp>r(   )r   r   r   r   rO   .  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__r   )r!   r]   r^   r_   HTTPVersionTypesr   propertyrb   Listr@   rO   r$   r   r   r   r   r     s    c                   @   sR   e Zd ZdZdddddededefddZd	ejd
e	fddZ
d
efddZdS )
PoolLimitszC
    Limits on the number of connections in a connection pool.
    N
soft_limit
hard_limitpool_timeoutr   r   r   c                C   s   || _ || _|| _d S r   r   )r   r   r   r   r   r   r   r   B  s   
zPoolLimits.__init__r   r   c                 C   rh   r   )r   r   r   r   r   r   r   r   r   r   M  ri   zPoolLimits.__eq__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!   r   r   r   r"   r   r   r   r$   U  s   zPoolLimits.__repr__)r!   r]   r^   r_   intrk   r   rb   rc   r5   r   r@   r$   r   r   r   r   r   =  s    
r   Tr%   g      @)rg   
   d   r      )%rQ   r   rb   pathlibr   certifir   utilsr   r   Unionr@   Tupler`   r5   r   ra   rk   rj   r~   r|   Z
USER_AGENTrv   joinrL   r!   r)   r   r   r   r   ZDEFAULT_SSL_CONFIGZDEFAULT_TIMEOUT_CONFIGZDEFAULT_POOL_LIMITSwherer6   ZDEFAULT_MAX_REDIRECTSr   r   r   r   <module>   s:    &

 -5. 
