
    	h                        d dl mZ d dlZd dl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mZmZmZ dZh dZ G d	 d
          ZdS )    )annotationsN)Sequence)HeadersMutableHeaders)PlainTextResponseResponse)ASGIAppMessageReceiveScopeSend)DELETEGETHEADOPTIONSPATCHPOSTPUT>   Content-TypeAccept-LanguageContent-LanguageAcceptc                  f    e Zd Z	 	 	 	 	 	 	 d+d,dZd-dZd.dZd/d#Zd0d$Zd1d'Ze	d2d*            Z
dS )3CORSMiddleware r   FNX  appr	   allow_originsSequence[str]allow_methodsallow_headersallow_credentialsboolallow_origin_regex
str | Noneexpose_headersmax_ageintreturnNonec	                v   d|v rt           }d }	|t          j        |          }	d|v }
d|v }|
 p|}i }|
rd|d<   |rd|d<   |rd                    |          |d<   i }|rd|d<   nd|d<   |                    d                    |          t          |          d	           t          t          t          |          z            }|r|sd                    |          |d
<   |rd|d<   || _	        || _
        || _        d |D             | _        |
| _        || _        || _        |	| _        || _        || _        d S )N*Access-Control-Allow-Origintruez Access-Control-Allow-Credentials, zAccess-Control-Expose-HeadersOriginVary)zAccess-Control-Allow-MethodszAccess-Control-Max-AgeAccess-Control-Allow-Headersc                6    g | ]}|                                 S r   lower.0hs     f/var/www/html/web-builder-api.evdpl.com/venv/lib/python3.11/site-packages/starlette/middleware/cors.py
<listcomp>z+CORSMiddleware.__init__.<locals>.<listcomp>C   s     ???Aaggii???    )ALL_METHODSrecompilejoinupdatestrsortedSAFELISTED_HEADERSsetr   r   r!   r"   allow_all_originsallow_all_headerspreflight_explicit_allow_originr%   simple_headerspreflight_headers)selfr   r   r!   r"   r#   r%   r'   r(   compiled_allow_origin_regexrF   rG   rH   rI   rJ   s                  r:   __init__zCORSMiddleware.__init__   s    -'M&*#)*,*5G*H*H'=0=0.?*?*TCT' 	@<?N89 	HAGN=> 	X>Bii>W>WN:;* 	C(0f%%?B;<  04		-0H0H*-g,, 	
 	
 	
 1C4F4FFGG 	Y!2 	Y@D		-@X@X<= 	KDJ@A**?????!2!2/N,"=,!2r<   scoper   receiver   sendr   c                  K   |d         dk    r|                      |||           d {V  d S |d         }t          |          }|                    d          }||                      |||           d {V  d S |dk    r/d|v r+|                     |          } ||||           d {V  d S |                     ||||           d {V  d S )	NtypehttpmethodrN   originr   access-control-request-method)request_headers)r   r   getpreflight_responsesimple_response)rK   rN   rO   rP   rT   headersrV   responses           r:   __call__zCORSMiddleware.__call__K   s*     =F""((5'4000000000Fx&&&X&&>((5'4000000000FY#Bg#M#M..w.GGH(5'4000000000F""5'4"QQQQQQQQQQQr<   rV   rB   c                l    | j         rdS | j        | j                            |          rdS || j        v S )NT)rF   r%   	fullmatchr   )rK   rV   s     r:   is_allowed_originz CORSMiddleware.is_allowed_origin_   sE    ! 	4".43J3T3TU[3\3\.4+++r<   rX   r   r   c                j   |d         }|d         }|                     d          }t          | j                  }g }|                     |          r| j        r||d<   n|                    d           || j        vr|                    d           | j        r|||d<   nV|Td |                    d	          D             D ]4}|	                                | j
        vr|                    d
            n5|r*dd                    |          z   }t          |d|          S t          dd|          S )NrV   rW   zaccess-control-request-headersrV   r.   rT   r3   c                6    g | ]}|                                 S r   r5   r7   s     r:   r;   z5CORSMiddleware.preflight_response.<locals>.<listcomp>   s     KKK17799KKKr<   ,r\   zDisallowed CORS r0   i  )status_coder\   OK   )rY   dictrJ   ra   rH   appendr!   rG   splitstripr"   r@   r   )	rK   rX   requested_originrequested_methodrequested_headersr\   failuresheaderfailure_texts	            r:   rZ   z!CORSMiddleware.preflight_responseh   sz   *84*+JK+//0PQQt-..!!)9!:: 	&3 J :J56OOH%%%4#555OOH%%% ! 	&7&C6GG233*KK.?.E.Ec.J.JKKK  <<>>);;;OOI...E <  	U-		(0C0CCL$\sGTTTT 3HHHHr<   c                |   K   t          j        | j        ||          }|                     |||           d {V  d S )N)rP   rX   )	functoolspartialrP   r   )rK   rN   rO   rP   rX   s        r:   r[   zCORSMiddleware.simple_response   sM       WWWhhugt,,,,,,,,,,,r<   messager
   c                  K   |d         dk    r ||           d {V  d S |                     dg            t          |          }|                    | j                   |d         }d|v }| j        r|r|                     ||           n3| j        s,|                     |          r|                     ||            ||           d {V  d S )NrR   zhttp.response.startr\   rU   r1   cookierc   )
setdefaultr   rA   rI   rF   allow_explicit_originra   )rK   rv   rP   rX   r\   rV   
has_cookies          r:   rP   zCORSMiddleware.send   s     6?333$w--F9b))) w///t*+++ *0
 ! 	8j 	8&&w7777 ' 	8D,B,B&,B,Q,Q 	8&&w777d7mmr<   r\   r   c                :    || d<   |                      d           d S )Nr.   r1   )add_vary_header)r\   rV   s     r:   rz   z$CORSMiddleware.allow_explicit_origin   s'    17-.)))))r<   )r   r   r   FNr   r   )r   r	   r   r    r!   r    r"   r    r#   r$   r%   r&   r'   r    r(   r)   r*   r+   )rN   r   rO   r   rP   r   r*   r+   )rV   rB   r*   r$   )rX   r   r*   r   )
rN   r   rO   r   rP   r   rX   r   r*   r+   )rv   r
   rP   r   rX   r   r*   r+   )r\   r   rV   rB   r*   r+   )__name__
__module____qualname__rM   r^   ra   rZ   r[   rP   staticmethodrz   r   r<   r:   r   r      s         (*'/')"')-(*93 93 93 93 93vR R R R(, , , ,$I $I $I $IL- - - -   . * * * \* * *r<   r   )
__future__r   rt   r>   collections.abcr   starlette.datastructuresr   r   starlette.responsesr   r   starlette.typesr	   r
   r   r   r   r=   rD   r   r   r<   r:   <module>r      s    " " " " " "     				 $ $ $ $ $ $ < < < < < < < < ; ; ; ; ; ; ; ; B B B B B B B B B B B B B BJVVV ]* ]* ]* ]* ]* ]* ]* ]* ]* ]*r<   