
    df                     x    d dl Z d dlZd dl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y)	    N)HeadersMutableHeaders)PlainTextResponseResponse)ASGIAppMessageReceiveScopeSend)DELETEGETHEADOPTIONSPATCHPOSTPUT>   Content-TypeAccept-LanguageContent-LanguageAcceptc                   T   e Zd Z	 	 	 	 	 	 	 ddedej
                  e   dej
                  e   dej
                  e   dedej                  e   dej
                  e   d	e	d
dfdZ
dededed
dfdZded
efdZded
efdZdedededed
df
dZdededed
dfdZededed
dfd       Zy)CORSMiddlewareNappallow_originsallow_methodsallow_headersallow_credentialsallow_origin_regexexpose_headersmax_agereturnc	                 l   d|v rt         }d }	|t        j                  |      }	d|v }
d|v }|
 xs |}i }|
rd|d<   |rd|d<   |rdj                  |      |d<   i }|rd|d<   nd|d<   |j	                  dj                  |      t        |      d	       t        t        t        |      z        }|r|sdj                  |      |d
<   |rd|d<   || _	        || _
        || _        |D cg c]  }|j                          c}| _        |
| _        || _        || _        |	| _        || _        || _        y c c}w )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-Headers)ALL_METHODSrecompilejoinupdatestrsortedSAFELISTED_HEADERSsetr   r   r   lowerr   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_regexr4   r5   r6   r7   r8   hs                   R/home/api-vastappli/venv/lib/python3.12/site-packages/starlette/middleware/cors.py__init__zCORSMiddleware.__init__   sw    -'M&*#)*,**5G*H'=0=0.?*?*TCT'<?N89AGN=>>Bii>WN:;*(0f%?B;<  04		-0H*-g,	
 1C4FFG!2@D		-@X<=DJ@A**1>?Aaggi?!2!2/N,"=,!2 @s   'D1scopereceivesendc                 z  K   |d   dk7  r| j                  |||       d {    y |d   }t        |      }|j                  d      }|| j                  |||       d {    y |dk(  r)d|v r%| j                  |      } ||||       d {    y | j	                  ||||       d {    y 7 7 S7 '7 w)	Ntypehttpmethodr>   originr   access-control-request-method)request_headers)r   r   getpreflight_responsesimple_response)r9   r>   r?   r@   rD   headersrF   responses           r<   __call__zCORSMiddleware.__call__I   s     =F"((5'4000x&X&>((5'4000Y#Bg#M..w.GH5'4000""5'4"QQQ! 1 1
 1 	RsE   B;B3?B;!B5"-B;B7B;-B9.B;5B;7B;9B;rF   c                     | j                   ry| j                  | j                  j                  |      ry|| j                  v S )NT)r4   r   	fullmatchr   )r9   rF   s     r<   is_allowed_originz CORSMiddleware.is_allowed_origin]   sF    !!"".43J3J3T3T4
 ++++    rH   c                 j   |d   }|d   }|j                  d      }t        | j                        }g }| j                  |      r| j                  r||d<   n|j                  d       || j                  vr|j                  d       | j                  r|||d<   nc|a|j                  d      D cg c]  }|j                          c}D ]1  }|j                         | j                  vs |j                  d	        n |r"d
dj                  |      z   }	t        |	d|      S t        dd|      S c c}w )NrF   rG   zaccess-control-request-headersrF   r$   rD   r)   ,rL   zDisallowed CORS r&   i  )status_coderL   OK   )rI   dictr8   rQ   r6   appendr   r5   splitr3   stripr   r-   r   )
r9   rH   requested_originrequested_methodrequested_headersrL   failuresr;   headerfailure_texts
             r<   rJ   z!CORSMiddleware.preflight_responseh   s;   *84*+JK+//0PQt--.!!)9!:33 :J56OOH%4#5#55OOH% !!&7&C6GG23*.?.E.Ec.JK1779K <<>););;OOI. -		(0CCL$\sGTT 3HH Ls   0D0c                    K   t        j                  | j                  ||      }| j                  |||       d {    y 7 w)N)r@   rH   )	functoolspartialr@   r   )r9   r>   r?   r@   rH   s        r<   rK   zCORSMiddleware.simple_response   s6        Whhugt,,,s   9AAAmessagec                   K   |d   dk7  r ||       d {    y |j                  dg        t        |      }|j                  | j                         |d   }d|v }| j                  r|r| j                  ||       n0| j                  s$| j                  |      r| j                  ||        ||       d {    y 7 7 w)NrB   zhttp.response.startrL   rE   r'   cookierT   )
setdefaultr   r.   r7   r4   allow_explicit_originrQ   )r9   rf   r@   rH   rL   rF   
has_cookies          r<   r@   zCORSMiddleware.send   s      6?33w-9b) w/t**+ *0
 !!j&&w7 ''D,B,B&,B,Q&&w77m'  & 	s"   CC B#C:C;CCrL   c                 0    || d<   | j                  d       y )Nr$   r'   )add_vary_header)rL   rF   s     r<   rj   z$CORSMiddleware.allow_explicit_origin   s    17-.)rR   ) )r   rn   FNrn   iX  )__name__
__module____qualname__r   typingSequencer/   boolOptionalintr=   r
   r	   r   rN   rQ   r   r   rJ   rK   r   r@   staticmethodr   rj   rn   rR   r<   r   r      so    /1.6.0"'37/19393 s+93 s+	93
 s+93  93 #OOC093 ,93 93 
93vRE RG R4 RD R(	, 	, 	,$I' $Ih $IL--%,-48-KR-	-&*=D	2 *~ *s *t * *rR   r   )rd   r+   rr   starlette.datastructuresr   r   starlette.responsesr   r   starlette.typesr   r   r	   r
   r   r*   r1   r   rn   rR   r<   <module>r{      s1     	  < ; B BJV c* c*rR   