
    Owg                        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 y)    )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                      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y)CorsMiddlewareTc                v    || _         t        | j                         | _        | j                  rt        |        y y N)get_responser   
async_moder	   )selfr   s     M/var/www/horilla/myenv/lib/python3.12/site-packages/corsheaders/middleware.py__init__zCorsMiddleware.__init__!   s4     )-d.?.?@?? "$'	     c                    | j                   r| j                  |      S | j                  |      }|%| j                  |      }t	        |t
              sJ |}| j                  ||       |S r   )r   	__acall__check_preflightr   
isinstancer   add_response_headersr   requestresponseresults       r   __call__zCorsMiddleware.__call__1   sk     ??>>'**,0,@,@,I&&w/Ff&6777H!!'84r   c                   K   | j                  |      }|-| j                  |      }t        |t              rJ | d {   }| j	                  ||       |S 7 wr   )r   r   r   r   r   r   s       r   r   zCorsMiddleware.__acall__>   s^     ''0&&w/F!&*:;;;#|H!!'84 $s   <AAAc                    | j                  |      |_        |j                  r+|j                  dk(  rd|j                  v rt	        ddi      S y)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   sJ     !% 8!!)+/7??B)93(?@@r   c                   t        |dd      }|| j                  |      }|s|S t        |d       |j                  j	                  d      }|s|S 	 t        |      }t        j                  s%| j                  ||      s| j                  |      s|S t        j                  rt        j                  s
d|t        <   n	||t        <   t        j                  r	d|t        <   t        t        j                        r&dj!                  t        j                        |t"        <   |j$                  dk(  r|dj!                  t        j&                        |t(        <   dj!                  t        j*                        |t,        <   t        j.                  r t1        t        j.                        |t2        <   t        j4                  r+|j                  j	                  t6              dk(  r	d|t8        <   |S # t        $ r |cY S w xY w)	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.   urls         r   r   z#CorsMiddleware.add_response_headersT   s    '?D9?oog.GO8[1$$X.O	6"C
 ++44VSA%%g.O&&t/J/J47H014:H01&&9?H56t''(6:ii((7H23 >>Y&59YYt?V?V5WH1259YYt?V?V5WH12**36t7R7R3S/0 ++##$JKvU=CH9:G  	O	s   G$ $G21G2c                    |dk(  xr |t         j                  v xs$ | j                  |      xs | j                  |      S )Nnull)r   CORS_ALLOWED_ORIGINS_url_in_whitelistregex_domain_match)r   r.   rI   s      r   r5   z*CorsMiddleware.origin_found_in_white_lists   sE    vE&D,E,E"E /%%c*/&&v.	
r   c                H    t        fdt        j                  D              S )Nc              3  J   K   | ]  }t        j                  |        y wr   )rematch).0domain_patternr.   s     r   	<genexpr>z4CorsMiddleware.regex_domain_match.<locals>.<genexpr>   s$      
 HH^V,
s    #)anyr   CORS_ALLOWED_ORIGIN_REGEXES)r   r.   s    `r   rN   z!CorsMiddleware.regex_domain_match   s#     
"&"B"B
 
 	
r   c                    t        t        j                  t        j                  |j
                              xs | j                  |      S r   )boolrQ   rR   r   CORS_URLS_REGEX	path_infor6   r,   s     r   r)   zCorsMiddleware.is_enabled   s<    HHT))7+<+<=
 (w'	(r   c                T    t        j                  d |      }t        d |D              S )N)senderr    c              3  &   K   | ]	  \  }}|  y wr    )rS   functionreturn_values      r   rU   z.CorsMiddleware.check_signal.<locals>.<genexpr>   s     O$:Hl<Os   )r   sendrV   )r   r    signal_responsess      r   r6   zCorsMiddleware.check_signal   s'    055T7SO>NOOOr   c                    t         j                  D cg c]  }t        |       }}t        fd|D              S c c}w )Nc              3     K   | ]8  }|j                   j                   k(  xr |j                  j                  k(   : y wr   )schemenetloc)rS   r.   rI   s     r   rU   z3CorsMiddleware._url_in_whitelist.<locals>.<genexpr>   s;      
 MMSZZ'GFMMSZZ,GG
s   >A)r   rL   r   rV   )r   rI   ooriginss    `  r   rM   z CorsMiddleware._url_in_whitelist   s@    (,(A(AB18A;BB 
!
 
 	
 Cs   <N)r   z`Callable[[HttpRequest], HttpResponseBase] | Callable[[HttpRequest], Awaitable[HttpResponseBase]]returnNone)r    r
   rj   z.HttpResponseBase | Awaitable[HttpResponseBase])r    r
   rj   r   )r    r
   rj   zHttpResponseBase | None)r    r
   r!   r   rj   r   )r.   rC   rI   r   rj   rY   )r.   rC   rj   rY   )r    r
   rj   rY   )rI   r   rj   rY   )__name__
__module____qualname__sync_capableasync_capabler   r#   r   r   r   r5   rN   r)   r6   rM   r_   r   r   r   r      s}    LM(C( 
( "	78"8.>8	8t

(
P
r   r   )!
__future__r   rQ   collections.abcr   typingr   urllib.parser   r   asgiref.syncr   r	   django.httpr
   r   django.http.responser   django.utils.cacher   corsheaders.confr   corsheaders.signalsr   r8   r=   r9   r?   rA   rD   rF   rG   r   r_   r   r   <module>r{      sk    " 	 %  $ ! , . # $ 1 1 ! 5;  ? #E  = = 1 )Q &'M $L
 L
r   