
    i                     x    S SK r S SKrS SKrS SKJrJr  S SKJrJr  S SK	J
r
JrJrJrJr  Sr1 Skr " S S5      rg)	    N)HeadersMutableHeaders)PlainTextResponseResponse)ASGIAppMessageReceiveScopeSend)DELETEGETHEADOPTIONSPATCHPOSTPUT>   AcceptContent-TypeAccept-LanguageContent-Languagec                   l   \ rS rSr       SS\S\R                  \   S\R                  \   S\R                  \   S\S\R                  \   S	\R                  \   S
\
SS4S jjrS\S\S\SS4S jrS\S\4S jrS\S\4S jrS\S\S\S\SS4
S jrS\S\S\SS4S jr\S\S\SS4S j5       rSrg)CORSMiddleware   Nappallow_originsallow_methodsallow_headersallow_credentialsallow_origin_regexexpose_headersmax_agereturnc	                    SU;   a  [         nS n	Ub  [        R                  " U5      n	SU;   n
SU;   nU
(       + =(       d    Un0 nU
(       a  SUS'   U(       a  SUS'   U(       a  SR                  U5      US'   0 nU(       a  SUS'   OSUS'   UR	                  SR                  U5      [        U5      S	.5        [        [        [        U5      -  5      nU(       a  U(       d  SR                  U5      US
'   U(       a  SUS'   Xl	        X l
        X0l        U Vs/ s H  oR                  5       PM     snU l        Xl        Xl        Xl        Xl        Xl        Xl        g s  snf )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_regexr5   r6   r7   r8   r9   hs                   d/home/maestro/MAESTRO/maestro-backend/venv/lib/python3.13/site-packages/starlette/middleware/cors.py__init__CORSMiddleware.__init__   sg    -'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>?Aggi?!2!2/N,"=,!2 @s   Escopereceivesendc                 h  #    US   S:w  a  U R                  XU5      I S h  vN   g US   n[        US9nUR                  S5      nUc  U R                  XU5      I S h  vN   g US:X  a'  SU;   a!  U R                  US9nU" XU5      I S h  vN   g U R	                  XX5S9I S h  vN   g  N NM N" N7f)	Ntypehttpmethodr@   originr   access-control-request-method)request_headers)r   r   getpreflight_responsesimple_response)r:   r@   rA   rB   rF   headersrH   responses           r=   __call__CORSMiddleware.__call__I   s     =F"((54000x&X&>((54000Y#Bg#M..w.GH54000""54"QQQ! 1 1
 1 	RsE   B2B*<B2B,,B2B.B2$B0%B2,B2.B20B2rH   c                     U R                   (       a  gU R                  b!  U R                  R                  U5      (       a  gXR                  ;   $ )NT)r5   r   	fullmatchr   )r:   rH   s     r=   is_allowed_origin CORSMiddleware.is_allowed_origin]   sI    !!"".43J3J3T3T4
 4
 ++++    rJ   c                    US   nUS   nUR                  S5      n[        U R                  5      n/ nU R                  US9(       a  U R                  (       a  X%S'   OUR                  S5        X0R                  ;  a  UR                  S5        U R                  (       a  Ub  XES'   OjUbg  UR                  S5       Vs/ s H  owR                  5       PM     sn H4  nUR                  5       U R                  ;  d  M#  UR                  S	5          O   U(       a  S
SR                  U5      -   n	[        U	SUS9$ [        SSUS9$ s  snf )NrH   rI   zaccess-control-request-headersrH   r%   rF   r*   ,rN   zDisallowed CORS r'   i  )status_coderN   OK   )rK   dictr9   rT   r7   appendr   r6   splitr4   stripr   r.   r   )
r:   rJ   requested_originrequested_methodrequested_headersrN   failuresr<   headerfailure_texts
             r=   rL   !CORSMiddleware.preflight_responseh   s6   *84*+JK+//0PQt--.!!)9!:33 :J56OOH%#5#55OOH% !!&7&C6G23*.?.E.Ec.JK.J779.JK<<>););;OOI. L -		(0CCL$\sGTT 3HH Ls   =Ec                    #    [         R                  " U R                  X4S9nU R                  XU5      I S h  vN   g  N7f)N)rB   rJ   )	functoolspartialrB   r   )r:   r@   rA   rB   rJ   s        r=   rM   CORSMiddleware.simple_response   s1        Whhut,,,s   5?=?messagec                   #    US   S:w  a  U" U5      I S h  vN   g UR                  S/ 5        [        US9nUR                  U R                  5        US   nSU;   nU R                  (       a  U(       a  U R                  XE5        O6U R                  (       d%  U R                  US9(       a  U R                  XE5        U" U5      I S h  vN   g  N N7f)NrD   zhttp.response.startrN   rG   r(   cookierX   )
setdefaultr   r/   r8   r5   allow_explicit_originrT   )r:   rl   rB   rJ   rN   rH   
has_cookies          r=   rB   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B0CC	CCrN   c                 .    XS'   U R                  S5        g )Nr%   r(   )add_vary_header)rN   rH   s     r=   rp   $CORSMiddleware.allow_explicit_origin   s    17-.)rV   )
r6   r5   r   r   r   r   r   r7   r9   r8   ) )r   rv   FNrv   iX  )__name__
__module____qualname____firstlineno__r   typingSequencer0   boolOptionalintr>   r
   r	   r   rP   rT   r   r   rL   rM   r   rB   staticmethodr   rp   __static_attributes__rv   rV   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 * *rV   r   )ri   r,   r{   starlette.datastructuresr   r   starlette.responsesr   r   starlette.typesr   r   r	   r
   r   r+   r2   r   rv   rV   r=   <module>r      s1     	  < ; B BJV c* c*rV   