
    9Cg                        d dl mZ 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dS )
    )annotationsN)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typing.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     K/var/www/api/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_regexrE   rF   rG   rH   rI   s                  r9   __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rM   originr   access-control-request-method)request_headers)r   r   getpreflight_responsesimple_response)rJ   rM   rN   rO   rS   headersrU   responses           r9   __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;   rU   rA   c                l    | j         rdS | j        | j                            |          rdS || j        v S )NT)rE   r$   	fullmatchr   )rJ   rU   s     r9   is_allowed_originz CORSMiddleware.is_allowed_origin_   sE    ! 	4".43J3T3TU[3\3\.4+++r;   rW   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 )NrU   rV   zaccess-control-request-headersrU   r-   rS   r2   c                6    g | ]}|                                 S r   r4   r6   s     r9   r:   z5CORSMiddleware.preflight_response.<locals>.<listcomp>   s     KKK17799KKKr;   ,r[   zDisallowed CORS r/   i  )status_coder[   OK   )rX   dictrI   r`   rG   appendr    rF   splitstripr!   r?   r   )	rJ   rW   requested_originrequested_methodrequested_headersr[   failuresheaderfailure_texts	            r9   rY   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)rO   rW   )	functoolspartialrO   r   )rJ   rM   rN   rO   rW   s        r9   rZ   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 )NrQ   zhttp.response.startr[   rT   r0   cookierb   )
setdefaultr   r@   rH   rE   allow_explicit_originr`   )rJ   ru   rO   rW   r[   rU   
has_cookies          r9   rO   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-   r0   )add_vary_header)r[   rU   s     r9   ry   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*   )rM   r   rN   r
   rO   r   r)   r*   )rU   rA   r)   r#   )rW   r   r)   r   )
rM   r   rN   r
   rO   r   rW   r   r)   r*   )ru   r	   rO   r   rW   r   r)   r*   )r[   r   rU   rA   r)   r*   )__name__
__module____qualname__rL   r]   r`   rY   rZ   rO   staticmethodry   r   r;   r9   r   r      s         /1.6.0"')-/193 93 93 93 93vR R R R(, , , ,$I $I $I $IL- - - -   . * * * \* * *r;   r   )
__future__r   rs   r=   typingstarlette.datastructuresr   r   starlette.responsesr   r   starlette.typesr   r	   r
   r   r   r<   rC   r   r   r;   r9   <module>r      s    " " " " " "     				  < < < < < < < < ; ; ; ; ; ; ; ; B B B B B B B B B B B B B BJVVV ]* ]* ]* ]* ]* ]* ]* ]* ]* ]*r;   