
    ^f                        d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dl	mZ d d	lmZ d d
l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          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                  f    e Zd ZdZdZddZdd
ZddZddZd dZ	d!dZ
d"dZd#dZd#dZd$dZdS )%CorsMiddlewareTget_response`Callable[[HttpRequest], HttpResponseBase] | Callable[[HttpRequest], Awaitable[HttpResponseBase]]returnNonec                v    || _         t          | j                   | _        | j        rt          |            d S d S N)r   r	   
async_moder
   )selfr   s     H/var/www/html/env/lib/python3.11/site-packages/corsheaders/middleware.py__init__zCorsMiddleware.__init__!   sH     )-d.?@@? 	( "$'''''		( 	(    requestr   .HttpResponseBase | Awaitable[HttpResponseBase]c                    | j         r|                     |          S |                     |          }|.|                     |          }t	          |t
                    sJ |}|                     ||           |S r   )r   	__acall__check_preflightr   
isinstancer   add_response_headersr   r   responseresults       r   __call__zCorsMiddleware.__call__1   s     ? 	+>>'***,0,@,@,I,I&&w//Ff&677777H!!'8444r   r   c                   K   |                      |          }|4|                     |          }t          |t                    rJ | d {V }|                     ||           |S r   )r"   r   r#   r   r$   r%   s       r   r!   zCorsMiddleware.__acall__>   su      ''00&&w//F!&*:;;;;;#||||||H!!'8444r   HttpResponseBase | Nonec                    |                      |          |_        |j        r&|j        dk    rd|j        v rt	          ddi          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   s     r   r"   zCorsMiddleware.check_preflightG   sZ     !% 8 8!	A)++/7?BB)93(?@@@@tr   r&   c                   t          |dd          }||                     |          }|s|S t          |d           |j                            d          }|s|S 	 t          |          }n# t          $ r |cY S w xY wt          j        s-| 	                    ||          s| 
                    |          s|S t          j        rt          j        sd|t          <   n
||t          <   t          j        r
d|t          <   t          t          j                  r'd                    t          j                  |t"          <   |j        dk    r{d                    t          j                  |t(          <   d                    t          j                  |t,          <   t          j        r!t1          t          j                  |t2          <   t          j        r-|j                            t6                    dk    r
d|t8          <   |S )	z1
        Add the respective CORS headers
        r0   N)originr4   *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_HEADERSr1   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&   enabledr4   urls         r   r$   z#CorsMiddleware.add_response_headersT   s    '?D99?oog..G 	O8[111$$X.. 	O	6""CC 	 	 	OOO	 +	44VSAA	 %%g..	
 O& 	;t/J 	;47H0114:H01& 	@9?H56t'(( 	6:ii(7 7H23 >Y&&59YYt?V5W5WH1259YYt?V5W5WH12* T36t7R3S3S/0 +	D##$JKKvUU=CH9:s   A, ,A;:A;r4   rI   rO   r   boolc                ~    |dk    r|t           j        v p)|                     |          p|                     |          S )Nnull)r   CORS_ALLOWED_ORIGINS_url_in_whitelistregex_domain_match)r   r4   rO   s      r   r;   z*CorsMiddleware.origin_found_in_white_lists   sH    vE&D,E"E /%%c**/&&v..	
r   c                N    t          fdt          j        D                       S )Nc              3  B   K   | ]}t          j        |          V  d S r   )rematch).0domain_patternr4   s     r   	<genexpr>z4CorsMiddleware.regex_domain_match.<locals>.<genexpr>   sC       
 
 H^V,,
 
 
 
 
 
r   )anyr   CORS_ALLOWED_ORIGIN_REGEXES)r   r4   s    `r   rU   z!CorsMiddleware.regex_domain_match   s>     
 
 
 
"&"B
 
 
 
 
 	
r   c                    t          t          j        t          j        |j                            p|                     |          S r   )rP   rX   rY   r   CORS_URLS_REGEX	path_infor<   r2   s     r   r/   zCorsMiddleware.is_enabled   s?    HT)7+<==
 
 (w''	(r   c                `    t          j        d |          }t          d |D                       S )N)senderr   c              3      K   | ]	\  }}|V  
d S r    )rZ   functionreturn_values      r   r\   z.CorsMiddleware.check_signal.<locals>.<genexpr>   s'      OO$:Hl<OOOOOOr   )r   sendr]   )r   r   signal_responsess      r   r<   zCorsMiddleware.check_signal   s6    05T7SSSOO>NOOOOOOr   c                f    d t           j        D             }t          fd|D                       S )Nc                ,    g | ]}t          |          S re   r   )rZ   os     r   
<listcomp>z4CorsMiddleware._url_in_whitelist.<locals>.<listcomp>   s    BBB18A;;BBBr   c              3  X   K   | ]$}|j         j         k    o|j        j        k    V  %d S r   )schemenetloc)rZ   r4   rO   s     r   r\   z3CorsMiddleware._url_in_whitelist.<locals>.<genexpr>   sN       
 
 MSZ'GFMSZ,G
 
 
 
 
 
r   )r   rS   r]   )r   rO   originss    ` r   rT   z CorsMiddleware._url_in_whitelist   sQ    BB(ABBB 
 
 
 
!
 
 
 
 
 	
r   N)r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r*   )r   r   r&   r   r   r   )r4   rI   rO   r   r   rP   )r4   rI   r   rP   )r   r   r   rP   )rO   r   r   rP   )__name__
__module____qualname__sync_capableasync_capabler   r(   r!   r"   r$   r;   rU   r/   r<   rT   re   r   r   r   r      s        LM( ( ( (          8 8 8 8t
 
 
 

 
 
 
( ( ( (
P P P P
 
 
 
 
 
r   r   ) 
__future__r   rX   typingr   r   urllib.parser   r   asgiref.syncr	   r
   django.httpr   r   django.http.responser   django.utils.cacher   corsheaders.confr   corsheaders.signalsr   r>   rC   r?   rE   rG   rJ   rL   rM   r   re   r   r   <module>r      sd   " " " " " " 				             $ $ $ $ $ $ ! ! ! ! ! ! , , , , , , . . . . . . # # # # # # $ $ $ $ $ $ 1 1 1 1 1 1 1 1 1 1 1 1 ! ! ! ! ! ! 5 5 5 5 5 5;  ? #E  = = 1 )Q &'M $L
 L
 L
 L
 L
 L
 L
 L
 L
 L
r   