o
    -Œ?i�  ã                   @  s¾   d dl mZ d dlZd dlmZ d dlmZ d dlmZm	Z	 d dl
mZmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZ dZdZdZdZdZdZdZdZG dd„ dƒZ dS )é    )ÚannotationsN)Ú	Awaitable)ÚCallable)ÚSplitResultÚurlsplit)ÚiscoroutinefunctionÚmarkcoroutinefunction)ÚHttpRequestÚHttpResponse)ÚHttpResponseBase)Úpatch_vary_headers)Úconf)Úcheck_request_enabledzaccess-control-allow-originzaccess-control-expose-headersz access-control-allow-credentialszaccess-control-allow-headerszaccess-control-allow-methodszaccess-control-max-agez&access-control-request-private-networkz$access-control-allow-private-networkc                   @  sx   e Zd ZdZdZd&dd„Zd'dd„Zd(dd„Zd)dd„Zd*dd„Z	d+dd„Z
d,dd„Zd-dd „Zd-d!d"„Zd.d#d$„Zd%S )/ÚCorsMiddlewareTÚget_responseú`Callable[[HttpRequest], HttpResponseBase] | Callable[[HttpRequest], Awaitable[HttpResponseBase]]ÚreturnÚNonec                 C  s(   || _ t| j ƒ| _| jrt| ƒ d S d S ©N)r   r   Ú
async_moder   )Úselfr   © r   úV/var/www/html/premium_crap/venv/lib/python3.10/site-packages/corsheaders/middleware.pyÚ__init__   s
   üzCorsMiddleware.__init__Úrequestr	   ú.HttpResponseBase | Awaitable[HttpResponseBase]c                 C  sN   | j r|  |¡S |  |¡}|d u r|  |¡}t|tƒsJ ‚|}|  ||¡ |S r   )r   Ú	__acall__Úcheck_preflightr   Ú
isinstancer   Úadd_response_headers©r   r   ÚresponseÚresultr   r   r   Ú__call__.   s   


zCorsMiddleware.__call__r   c                 Ã  sF   �|   |¡}|d u r|  |¡}t|tƒrJ ‚|I d H }|  ||¡ |S r   )r   r   r   r   r   r    r   r   r   r   ;   s   €


zCorsMiddleware.__acall__úHttpResponseBase | Nonec                 C  s8   |   |¡|_|jr|jdkrd|jv rtddid�S dS )zB
        Generate a response for CORS preflight requests.
        ÚOPTIONSzaccess-control-request-methodzcontent-lengthÚ0)ÚheadersN)Ú
is_enabledÚ_cors_enabledÚmethodr'   r
   ©r   r   r   r   r   r   D   s   ÿ

zCorsMiddleware.check_preflightr!   c                 C  s.  t |ddƒ}|du r|  |¡}|s|S t|dƒ |j d¡}|s"|S zt|ƒ}W n ty3   | Y S w tjsD|  	||¡sD|  
|¡sD|S tjrOtjsOd|t< n||t< tjrZd|t< ttjƒrgd tj¡|t< |jdkr†d tj¡|t< d tj¡|t< tjr†ttjƒ|t< tjr•|j t¡dkr•d|t< |S )	z1
        Add the respective CORS headers
        r)   N©Úoriginr-   Ú*Útruez, r%   )Úgetattrr(   r   r'   Úgetr   Ú
ValueErrorr   ÚCORS_ALLOW_ALL_ORIGINSÚorigin_found_in_white_listsÚcheck_signalÚCORS_ALLOW_CREDENTIALSÚACCESS_CONTROL_ALLOW_ORIGINÚ ACCESS_CONTROL_ALLOW_CREDENTIALSÚlenÚCORS_EXPOSE_HEADERSÚjoinÚACCESS_CONTROL_EXPOSE_HEADERSr*   ÚCORS_ALLOW_HEADERSÚACCESS_CONTROL_ALLOW_HEADERSÚCORS_ALLOW_METHODSÚACCESS_CONTROL_ALLOW_METHODSÚCORS_PREFLIGHT_MAX_AGEÚstrÚACCESS_CONTROL_MAX_AGEÚCORS_ALLOW_PRIVATE_NETWORKÚ&ACCESS_CONTROL_REQUEST_PRIVATE_NETWORKÚ$ACCESS_CONTROL_ALLOW_PRIVATE_NETWORK)r   r   r!   Úenabledr-   Úurlr   r   r   r   Q   sP   

ÿÿ
þý

ÿ
ÿz#CorsMiddleware.add_response_headersr-   rB   rH   r   Úboolc                 C  s&   |dkr	|t jv p|  |¡p|  |¡S )NÚnull)r   ÚCORS_ALLOWED_ORIGINSÚ_url_in_whitelistÚregex_domain_match)r   r-   rH   r   r   r   r4   ‹   s
   ÿýz*CorsMiddleware.origin_found_in_white_listsc                   s   t ‡ fdd„tjD ƒƒS )Nc                 3  s   � | ]	}t  |ˆ ¡V  qd S r   )ÚreÚmatch)Ú.0Údomain_patternr,   r   r   Ú	<genexpr>“   s
   € 
ÿ
ÿz4CorsMiddleware.regex_domain_match.<locals>.<genexpr>)Úanyr   ÚCORS_ALLOWED_ORIGIN_REGEXES)r   r-   r   r,   r   rM   ’   s   þz!CorsMiddleware.regex_domain_matchc                 C  s   t t tj|j¡ƒp|  |¡S r   )rI   rN   rO   r   ÚCORS_URLS_REGEXÚ	path_infor5   r+   r   r   r   r(   ˜   s
   ÿþzCorsMiddleware.is_enabledc                 C  s    t jd |d�}tdd„ |D ƒƒS )N)Úsenderr   c                 s  s   � | ]\}}|V  qd S r   r   )rP   ÚfunctionÚreturn_valuer   r   r   rR   Ÿ   s   € z.CorsMiddleware.check_signal.<locals>.<genexpr>)r   ÚsendrS   )r   r   Úsignal_responsesr   r   r   r5   �   s   zCorsMiddleware.check_signalc                   s&   dd„ t jD ƒ}t‡ fdd„|D ƒƒS )Nc                 S  s   g | ]}t |ƒ‘qS r   )r   )rP   Úor   r   r   Ú
<listcomp>¢   s    z4CorsMiddleware._url_in_whitelist.<locals>.<listcomp>c                 3  s(   � | ]}|j ˆ j ko|jˆ jkV  qd S r   )ÚschemeÚnetloc)rP   r-   ©rH   r   r   rR   £   s
   € ÿ
ÿz3CorsMiddleware._url_in_whitelist.<locals>.<genexpr>)r   rK   rS   )r   rH   Úoriginsr   r`   r   rL   ¡   s   þz CorsMiddleware._url_in_whitelistN)r   r   r   r   )r   r	   r   r   )r   r	   r   r   )r   r	   r   r$   )r   r	   r!   r   r   r   )r-   rB   rH   r   r   rI   )r-   rB   r   rI   )r   r	   r   rI   )rH   r   r   rI   )Ú__name__Ú
__module__Ú__qualname__Úsync_capableÚasync_capabler   r#   r   r   r   r4   rM   r(   r5   rL   r   r   r   r   r      s    



	

:


r   )!Ú
__future__r   rN   Úcollections.abcr   Útypingr   Úurllib.parser   r   Úasgiref.syncr   r   Údjango.httpr	   r
   Údjango.http.responser   Údjango.utils.cacher   Úcorsheaders.confr   Úcorsheaders.signalsr   r7   r<   r8   r>   r@   rC   rE   rF   r   r   r   r   r   Ú<module>   s(    